Rust tips #1 ~ #20

💡 原文中文,约6400字,阅读约需16分钟。
📝

内容提要

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关键字可以捕获周围作用域的变量所有权。

🏷️

标签

➡️

继续阅读