Rust tips #1 ~ #20
内容提要
Rust不支持静态vec,但可以使用静态数组。可选值可以使用unwrap()解包,也可以使用match语句或unwrap_or_default()等方法安全解包。使用todo!()或unimplemented!()宏可以编译未完成的代码。可以使用matches!宏匹配枚举类型。{}块可以像函数一样返回结果。const和static有区别,const在编译期间替换,static在运行时存在。元组类型和字符串类型的使用。拼接字符串有两种方式。格式化打印宏的使用。使用if let解包可选值。实例化vector的方式。使用迭代器对vector进行迭代。初始化HashMap的方式。更好的unwrap()方法。定义匿名函数和使用move捕获变量。实现From() trait和Into() trait的转换机制。
延伸解读
可选值解包:unwrap 的风险与安全替代
文章指出,对可选值调用 unwrap() 在值为 None 时会导致程序 panic。为避免崩溃,可使用 match 语句明确处理分支,或采用 unwrap_or_default、unwrap_or、unwrap_or_else 等方法提供默认值或备用逻辑。这些方式让代码更健壮,尤其适合处理可能缺失的数据。
const 与 static 的选用场景
const 在编译期间被内联替换,适合定义全局常量;static 在运行时拥有固定内存地址,生命周期贯穿整个程序,且可以是可变的。若需要共享资源(如硬件驱动或数据库接口),static 更合适;若只是重复使用的常量值,const 更高效。
字符串类型与拼接方式
Rust 有 String 和 str 两种基本字符串类型:String 在堆上分配、可变,适合运行时修改;str 是不可变的字符串切片,常以字面量或引用形式出现。拼接字符串可使用 push_str 方法或 format! 宏,后者不改变原字符串,而是生成新字符串。
From 与 Into:类型转换的自动实现
实现 From trait 可为复杂类型定义转换逻辑,而 Rust 会自动为对应类型提供 Into 实现。例如为 ColorFloat 实现 From<Color8Bit> 后,即可用 color8.into() 得到 ColorFloat。这种机制简化了类型间的显式转换,提升代码可读性。
Q&A
Rust中如何安全解包可选值?
可以使用match语句、unwrap_or_default、unwrap_or和unwrap_or_else等方法进行安全解包。
Rust中的const和static有什么区别?
const在编译期间替换,而static在运行时存在并有固定内存地址。
如何在Rust中拼接字符串?
可以使用push_str方法或format!宏来拼接字符串。
Rust中如何定义和使用匿名函数?
可以使用闭包语法定义匿名函数,通常与迭代器一起使用。
Rust中如何实例化一个HashMap?
可以使用元组数组和迭代器来初始化HashMap。
Rust中如何使用move捕获变量的所有权?
在闭包中使用move关键字可以捕获周围作用域的变量所有权。