- 博客(34)
- 资源 (2)
- 收藏
- 关注
原创 【DevUI】Pagination 分页组件使用详解
DevUI Pagination 组件功能全面,配置灵活。明确需求:先确定是否需要每页条数切换、页面跳转等高级功能,按需启用。绑定数据:确保正确绑定totalpageIndex和pageSize,这是组件运行的基础。处理事件:在和事件中处理数据加载逻辑。注意边界:在数据量为0或1页时,组件会自动调整显示状态,保持界面友好。
2025-12-11 11:33:04
904
原创 【DevUI】StepsGuide 操作指引组件:从基础到进阶的完整指南
首先,在组件的 TypeScript 文件中定义指引步骤的配置数组。这是整个功能的核心数据源。})// 定义步骤数据,类型为 Steps[]// 当前步骤索引,用于显示和控制// 存储操作输出// 初始化步骤内容content: '这是第一步的引导说明。点击“我知道啦”继续。},content: '你已经来到了第二步。在继续前,可以执行一些自定义校验。',console.log('即将离开第二步,执行自定义逻辑');// 返回 true 或 Promise<true> 才允许继续。
2025-12-11 11:31:19
920
原创 【DevUI】Splitter 分割器组件使用详解
本文是关于DevUI Splitter 分割器组件的详细使用示例与代码说明总结文章。该组件基于 Angular ^18.0.0 版本,用于创建可交互调整区域大小的页面布局。DevUI Splitter 组件是构建灵活、可定制用户界面的利器。规划布局:先明确需要水平、垂直还是嵌套分割。设定尺寸:为每个窗格合理设置sizeminSizemaxSize,确保布局稳定。按需添加功能:若需折叠,添加;若需高级导航,考虑shrink模式。处理事件:通过sizeChange等事件保存用户布局设置,提升体验。
2025-12-11 11:26:02
916
原创 【DevUI】用于表现层级嵌套结构数据的核心Tree 树组件
本文是关于DevUI Tree 树组件的详细使用示例与代码说明总结文章。该组件是基于 Angular ^18.0.0 版本,用于展示层次结构数据,并提供了极其丰富的交互功能。Tree 树组件是 DevUI 中用于表现层级嵌套结构数据的核心组件。基础树 (<d-tree>:主要用于数据的层级展示与展开/折叠。可操作树 (:在基础树之上,集成了节点勾选、编辑、拖拽、搜索等全套交互功能,是功能最全面的版本。这是组件高度可定制化的体现,允许你完全控制节点图标、内容以及操作按钮的样式。
2025-12-11 11:24:09
814
原创 【 Rust探索】错误处理与日志记录结合(log crate使用)
在本案例中,我们完成了以下关键目标:✅实现了 Rust 中标准日志系统的接入通过log和env_logger,我们建立了统一的日志输出机制,支持多级别控制。✅将日志与错误处理深度融合在Result的各个分支中合理使用info!warn!error!,使得程序行为更加透明。✅引入anyhow简化错误传播与追溯相比传统match或anyhow极大提升了错误处理的简洁性和用户体验。✅展示了日志级别的实际应用场景明确了的分工,帮助开发者在不同环境下灵活调整输出粒度。✅提供了可扩展的学习路径。
2025-11-13 09:35:44
245
原创 【 Rust探索】使用match和if let处理Result错误
特性matchif let是否穷尽检查✅ 是(编译器强制)❌ 否(需手动加else可读性(复杂分支)⭐⭐⭐⭐☆⭐⭐☆☆☆可读性(单一成功路径)⭐⭐☆☆☆⭐⭐⭐⭐☆性能相同(底层均为模式匹配)相同适合场景需差异化处理错误、复杂状态机快速判断某个成功/特定错误情况错误信息保留能力✅ 强(可绑定错误变量)✅(可在else中获取)推荐度(通用)⭐⭐⭐⭐⭐⭐⭐⭐☆☆💡经验法则如果你需要“做什么事,出错就停下来”,用?;如果你要“根据结果决定下一步动作”,用match;如果你只想“
2025-11-13 09:34:51
536
原创 【 Rust探索】自定义错误类型(实现Error trait)
Rust 的错误处理以类型为核心,鼓励开发者显式地处理失败情况。虽然标准库提供了String或信息不明确:无法判断具体是哪一类错误。难以恢复:调用者不知道如何根据错误类型做出响应。缺乏结构:不能携带上下文数据(如文件名、行号等)。不利于测试与日志记录:无法进行模式匹配或分类统计。因此,自定义错误类型成为 Rust 工程实践中不可或缺的一环。定义清晰的错误分类;携带额外上下文信息;实现标准化的错误展示(Display。
2025-11-05 09:16:39
832
原创 【 Rust探索】Result枚举与?运算符简化错误传播
[error("文件打开失败: {source}")]IoError {#[from]},#[error("JSON 解析失败: {source}")]#[from]},: 自动为枚举实现trait 和Debugtrait。: 指定该变体的显示格式。#[from]: 表示该字段可以由其他错误类型自动转换而来(支持?自动转换)。实践推荐做法函数返回值库函数应返回具体,避免String错误传播尽量使用?,减少match嵌套错误定义使用thiserror创建语义明确的错误类型。
2025-11-05 09:16:03
1142
原创 【 Rust探索】用panic!处理不可恢复错误
可恢复错误(recoverable errors)和不可恢复错误(unrecoverable errors)。可恢复错误通常使用类型表示,比如文件打开失败、网络请求超时等,程序可以在出错后尝试重试或提供替代路径。不可恢复错误则是那些程序无法继续安全运行的情况,例如访问越界数组元素、解引用空指针、逻辑断言失败等。对于这类严重错误,Rust提供了panic!宏来立即终止程序执行。调用panic!打印出错信息;展开(unwind)调用栈,清理资源;结束进程。虽然panic!
2025-11-04 09:26:06
1303
原创 【 Rust探索】常用标准库Trait实践(Display、From/Into)
Pending,Shipped,Delivered,Cancelled,如果我们直接使用println!("{:?}", order)这对调试有用,但对用户不够友好。订单 #1001:Alice - 金额 ¥299.99 - 状态:已发货这就需要实现DisplayTrait。pub amount_str: String, // 输入可能是字符串Display和From/Into。✅ Display是我们向用户展示数据的首选方式。它要求我们显式定义格式化逻辑,确保输出清晰、专业。✅ From。
2025-11-04 09:23:54
714
原创 【 Rust探索】结构体方法与关联函数的实现
在 Rust 中,结构体(struct)是组织数据的核心方式之一。然而,仅有数据是不够的——我们还需要为这些数据赋予行为。方法(Methods):定义在impl块中、第一个参数为self&self或&mut self的函数,用于操作结构体实例。关联函数(Associated Functions):同样定义在impl块中,但不以self为参数,通常用作构造器(如new)或其他工具性功能。Rust 不支持传统意义上的“类”,但它通过结构体 +impl块实现了类似面向对象的封装特性。x: f64,
2025-11-03 10:15:22
1233
原创 【 Rust探索】结构体的定义与实例化(学生信息结构体)
在 Rust 中,结构体(struct)是一种用户自定义的数据类型,用于将多个相关的值组合成一个有意义的整体。它类似于其他语言中的“类”或“记录”,但不包含继承机制,而是强调数据的安全封装与所有权管理。普通结构体(命名字段结构体)元组结构体(无字段名的结构体)单元结构体(无字段,用于标记用途)本案例重点讲解最常用的——命名字段结构体。✅ 目标:能独立定义结构体并创建实例✅ 练习任务:定义Book结构体(title, author, pages)创建两本书的实例并打印字段💡 提示:使用。
2025-11-03 10:14:43
634
原创 【 Rust探索】使用Clone与Copy trait处理数据拷贝
Trait 是 Rust 中的行为抽象机制,类似于其他语言中的“接口”。实现某个 trait 表示该类型支持某种行为。Clone和Copy都是标准库中定义的 trait。它们决定了一个值是否可以被复制或克隆。Copy继承自Clone,但它是一个标记 trait(marker trait)—— 没有方法,只是告诉编译器“这个类型可以按位复制”。让我们通过一个实际例子来掌握如何为结构体添加Clone和Copy。本案例全面介绍了 Rust 中的Clone和Copy。
2025-11-03 10:14:10
861
原创 【 Rust探索】所有权与函数返回值的最佳实践
以下是我们在开发中应当遵循的函数返回值所有权最佳实践清单实践建议说明✅ 优先返回拥有所有权的类型(如StringVec<T>当你需要构造新数据时,直接返回 owned 类型最安全。✅ 避免返回局部变量的引用这会导致悬垂引用,编译器会拒绝。✅ 使用&str或&[T]返回已有数据的视图提高性能,减少拷贝,但需注意生命周期。✅ 对静态字符串使用如错误提示、默认配置等。✅ 善用和Option<T>让调用者清楚知道是否有有效值返回。✅ 谨慎使用.clone()只在必要时复制,避免不必要的性能损耗。
2025-11-03 10:13:39
817
原创 【 Rust探索】向量(Vec)的所有权与借用操作
Vec<T>在本案例中,我们系统性地探讨了 Rust 中Vec<T>类型在所有权与借用机制下的各种行为模式。核心要点如下:✅Vec<T>默认 move,不会自动 copy移动后原变量失效,禁止访问✅使用&Vec<T>实现只读共享使用实现唯一可变访问不可同时存在可变与不可变引用✅函数参数优先使用&[T]而非&Vec<T>尽量避免不必要的.clone(),影响性能返回新数据时转移所有权,修改数据时使用可变引用✅Rust 编译器阻止悬垂指针、数据竞争生命周期确保引用有效性掌握Vec。
2025-11-03 10:13:03
954
原创 【 Rust探索】字符串切片的范围访问与边界检查
在本案例中,我们深入探讨了 Rust 字符串切片的核心机制,特别是关于范围访问与边界检查的安全性问题。通过一系列代码演示与对比分析,你已经掌握了以下几个关键知识点:✅核心机制字符串切片&str是一种轻量级的借用视图切片基于字节索引,而非字符索引所有切片必须位于合法的 UTF-8 边界上✅安全策略使用替代[]可避免 panic动态范围应始终包裹在中处理多语言文本时,务必借助进行字符级定位✅工程建议在库函数中返回提高健壮性对外部输入的索引参数进行合法性校验使用clippy和。
2025-11-02 21:22:01
380
原创 【 Rust探索】切片(Slice)的创建与所有权分析
在 Rust 中,切片(Slice)是一种不拥有数据的引用类型,用于访问集合中一段连续的元素序列。最常见的形式是&[T](引用一个数组或向量的某段)和&str(字符串切片)。它可以让我们操作数据的一部分而无需复制数据本身,同时保持内存安全和零运行时开销。下面我们编写一个实用的小程序,展示切片在真实场景中的应用。/// 生成文本摘要,取前 n 个单词或指定字符数return "";// 尝试找到最后一个空格,不超过 max_chars.last()idx} else {// 向前找最近的空格。
2025-11-02 21:21:30
434
原创 【 Rust探索】可变借用的使用限制与数据修改
学习阶段目标推荐练习第1阶段理解&mut T语法和基本使用编写函数修改字符串长度第2阶段掌握三大借用规则故意制造冲突观察编译错误第3阶段应用于真实数据处理实现数组去重、排序等 inplace 操作第4阶段结合泛型与 trait 使用写通用的“修改器”函数第5阶段处理复杂借用场景使用RefCellCow第6阶段性能优化与工程实践在大型项目中重构借用逻辑在本案例中,我们系统学习了 Rust 中可变借用的核心机制与应用实践。以下是关键知识点回顾:✅核心概念可变借用通过。
2025-11-02 21:20:56
823
原创 【 Rust探索】不可变借用与多个借用规则实践
在 Rust 中,使用符号创建对变量的引用,即进行“借用”。如果只是读取而不修改,称为“不可变借用”。");// 创建不可变借用println!("字符串内容为:{}", ref_s);s是String类型的所有者;&s表示对s的不可变引用;ref_s持有这个引用,可以读取s的内容,但不能修改;当main函数结束时,s被释放,引用也随之失效。📌关键字高亮说明:表示创建引用(借用);ref:可用于模式匹配中的引用绑定(如),但在日常编程中更常用直接声明;
2025-11-02 21:20:17
283
原创 【 Rust探索】深入理解Rust所有权转移机制——从字符串赋值到函数传参
本案例围绕案例16:所有权转移机制(字符串赋值与函数传参)展开,全面剖析了Rust中最为关键的所有权模型。
2025-11-02 21:19:33
328
原创 【 Rust探索】嵌套函数与函数作为参数传递
嵌套函数指的是在一个函数内部定义另一个函数。它有助于组织代码逻辑,隐藏辅助功能的作用域,避免污染外部命名空间。Rust 不支持在函数体内直接定义另一个具名函数作为语句(这与 Python 或 JavaScript 不同),但我们可以通过let绑定 + 匿名函数(闭包)来实现类似效果。fn实践建议尽量使用泛型 +F: Fn提高复用性更灵活,兼容函数和闭包对简单回调使用fn类型性能更好,语义清晰避免过度嵌套闭包影响可读性,考虑提取为独立函数文档化函数参数的行为。
2025-11-01 18:23:57
433
原创 【 Rust探索】函数参数的不可变性与可变借用实践
本案例系统讲解了Rust 函数参数的不可变性与可变借用机制✅默认不可变:所有变量和参数默认不可变,需显式使用mut才能修改。✅引用避免所有权转移:使用&T和&mut T可在不获取所有权的情况下读写数据。✅可变借用的安全规则同一时间只能存在一个可变引用可变引用与不可变引用不能共存引用不能悬空✅性能优势:引用传递避免了不必要的数据复制,特别适合大型结构体或字符串。✅最佳实践优先使用&str而非&String修改数据时使用&mut T合理利用作用域管理借用生命周期。
2025-11-01 18:23:18
809
原创 【 Rust探索】函数的定义、参数传递与返回值处理
Rust 使用fnfn 函数名(参数列表) -> 返回类型 {// 函数体// 最后一个表达式自动作为返回值函数定义语法:使用fn关键字,明确参数类型与返回类型;表达式自动返回:最后一个无分号表达式即为返回值,无需return;所有权与借用机制值传递导致所有权转移;&T实现不可变借用;&mut T实现可变借用;返回值的所有权流转:函数可安全返回堆上数据的所有权;元组用于多值返回:虽无内置多返回值,但可通过元组模拟;实际应用示范:通过“学生成绩评级”案例展示函数协作模式;最佳实践建议。
2025-11-01 18:22:39
710
原创 【 Rust探索】使用 while 循环实现猜数字游戏(基础版)
在本案例中,我们通过实现一个“猜数字”游戏,系统性地练习了 Rust 的多项基础技能:✅掌握了while循环的基本语法与应用场景—— 使用while true实现持续交互,配合break和continue控制流程。✅学会了如何处理用户输入与类型转换—— 所有输入均为字符串,需通过转为数字,并使用match安全处理错误。✅理解了随机数生成的方法—— 引入rand外部库,调用生成目标数字。✅实践了模块导入与依赖管理—— 使用cargo add添加第三方库,熟悉Cargo.toml的依赖配置方式。
2025-11-01 18:22:00
1166
原创 【 Rust探索】使用for循环遍历数组与Range序列
Range类型写法区间含义左闭右开a..b[a, b)左闭右闭a..=b[a, b]无限起点..b(-∞, b)无限终点a..[a, +∞)全范围..整个空间(常用于切片)在本案例中,我们全面学习了Rust中for循环的使用方法,涵盖以下核心内容:✅核心语法掌握✅三大遍历模式collection(慎用)✅关键类型与traitRange:数值区间的强大表达Iterator:所有遍历的基础协议for in语法背后的魔法✅工程实践建议优先使用.iter()和多用替代手动索引。
2025-11-01 18:21:15
750
原创 【 Rust探索】使用match模式匹配实现简易计算器
match学习成果说明掌握match基本用法理解其作为表达式和控制流工具的双重角色学会使用Option处理异常如除零、非法输入等边界情况实践用户输入安全验证使用构建鲁棒输入系统理解&str与String的区别掌握.as_str()和切片用法编写结构化 CLI 程序拆分函数职责,提高代码可维护性通过案例10:使用match模式匹配实现简易计算器,你不仅完成了一个实用的小工具,更重要的是深入理解了 Rust 的核心思想之一 ——模式匹配 + 显式错误处理 + 内存安全。match。
2025-10-31 14:42:57
711
原创 【 Rust探索】if-else条件语句实现成绩等级判断
在本案例中,我们围绕“成绩等级判断”这一典型应用场景,系统学习了 Rust 中if-else条件语句的使用方法和最佳实践。主要收获包括:✅核心语法掌握ifelse ifelse结构必须配合{}使用条件表达式必须为bool类型✅if 作为表达式可用于变量初始化,提升代码简洁性所有分支需返回同类型值✅防御性编程意识建立输入验证先行(卫语句)错误处理使用matchparse()保证健壮性✅可读性优化策略减少嵌套层次提前返回非法情况输出友好提示信息✅工程化思维启蒙。
2025-10-31 14:41:50
285
原创 【 Rust探索】字符串类型(String与&str)的转换与常用方法
/ 创建空 String// 从字符串字面量创建 Stringlet s2 = String::from("编程");// &str 字面量let slice: &str = "入门";// 拼接println!// 输出:Rust编程入门本案例全面介绍了 Rust 中最重要的两种字符串类型 ——String和&str,并通过丰富的代码示例、对比表格和学习路径,帮助读者建立起对 Rust 字符串系统的深刻理解。本质区别String是拥有所有权的堆字符串,而&str。
2025-10-31 14:40:33
792
原创 【 Rust探索】复合数据类型之元组的创建与元素访问
元组是一种有序集合长度固定(编译期确定)元素类型可以不同支持通过索引访问存储在栈上(默认情况下),性能高效let person = ("张三", 25, true);// 名字(String), 年龄(u32), 是否已婚(bool)相比结构体,元组更适用于一次性或局部使用的场景,不需要提前定义类型,书写简洁。实践建议说明控制元组长度 ≤ 3超过3个字段考虑使用struct添加注释说明字段含义如优先使用解构而非多次.n访问更清晰安全避免深层嵌套元组可读性差,难维护。
2025-10-31 11:30:58
1277
原创 Rust 学习笔记(四):变量绑定 —— 可变性、作用域与遮蔽
阶段内容要点第一阶段变量绑定let创建绑定,类型推断第二阶段可变绑定通过mut显式可变第三阶段作用域变量只在{}内有效第四阶段遮蔽用相同名字重新绑定新值第五阶段生命周期离开作用域自动释放资源Rust 的设计哲学之一是“默认安全让变量默认不可变,强制作用域清晰,防止隐式共享,就是它安全性的来源。一开始你可能觉得“啰嗦”,但当项目变大时,这种严格反而能救命。每个变量都明确、可控、不混乱,程序自然更稳定。程序的稳定,始于每一个“被约束”的变量。
2025-10-30 16:59:12
817
原创 Rust 学习笔记(三):自定义类型 —— 玩转结构体与枚举
学完了 Rust 的基本类型(整数、浮点、布尔等),你也许会发现:用这些“原始砖块”写程序,就像用乐高积木堆房子,虽然能拼出形状,但很笨拙。于是,Rust 提供了更高级的“模型工具”——结构体(struct)和枚举(enum)。有了它们,我们可以创造出自己的数据类型,构建真正能描述业务逻辑的程序。这一章,就带你从零开始,学会定义、使用和打印结构体与枚举,并理解它们背后的设计哲学。Rust 中的结构体类似于 Java 的类(但没有方法),用于将不同类型的数据打包在一起。age: u8,
2025-10-30 16:55:26
545
原创 Rust 学习笔记(二):深入了解原生类型(Primitives)
阶段学习内容要点第一阶段整数类型区分有符号/无符号第二阶段浮点数默认 f64,符合 IEEE 754第三阶段布尔与条件只能使用bool判断第四阶段字符与字符串char支持 Unicode,String可变第五阶段数组与元组定长数组与多类型元组第六阶段单元类型表示“无返回值”第七阶段类型推断Rust 编译器自动判断类型Rust 的原生类型看似简单,但它们是理解所有权(ownership)借用(borrowing)内存安全等核心机制的基础。
2025-10-30 16:51:38
874
原创 Rust 学习笔记(一):从 Hello World 开始
有时候我们需要查看结构体里的数据,直接打印是行不通的。Rust 不允许随意打印用户定义的类型。想打印结构体,需要实现Debug或Display。("{:?}", p);println!("{:#?}", p);// 美化打印Person {age: 28,如果想更漂亮一点,用Displaywrite!println!("{}", p);会自动生成调试格式输出Display需要自己写打印格式{}调用的是Display{:?调用的是Debug。
2025-10-30 16:43:31
593
1
docker官方使用的centos版openjdk8
2022-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅