Rust 常见20类常见Trait,你熟悉多少?

964 阅读4分钟

在 Rust 中,trait 是一种定义一组方法的方式,这些方法可以被不同类型实现。它类似于其他语言中的接口或抽象基类。

trait 可以用来定义一个类型应该具有的行为。例如,你可以定义一个 Drawable trait,它包含一个 draw 方法。然后,你可以为不同的类型(如 CircleRectangle 等)实现这个 trait,以便它们都可以被绘制。

trait 还可以用来实现泛型编程。你可以定义一个函数,它接受一个实现了特定 trait 的类型作为参数。这样,你就可以在函数中使用 trait 中定义的方法,而不用关心具体的类型。

此外,trait 还可以用来实现运算符重载、静态分派和动态分派等高级功能。

下面是 Rust 标准库中常见的 20种trait:对于在学习rust中的你都熟悉这些trait以及它们的用法吗?

Trait 名称用途如何使用
Copy允许按位复制类型的值在类型定义上添加 #[derive(Copy)]
Clone允许显式复制类型的值在类型定义上添加 #[derive(Clone)] 或手动实现 clone 方法
Eq表示类型可以进行相等性比较在类型定义上添加 #[derive(Eq)] 或手动实现 eq 方法
PartialEq表示类型可以进行部分相等性比较在类型定义上添加 #[derive(PartialEq)] 或手动实现 eq 方法
Ord表示类型可以进行全序比较在类型定义上添加 #[derive(Ord)] 或手动实现 cmp 方法
PartialOrd表示类型可以进行部分序比较在类型定义上添加 #[derive(PartialOrd)] 或手动实现 partial_cmp 方法
Debug允许格式化输出调试信息在类型定义上添加 #[derive(Debug)] 或手动实现 fmt 方法
Default允许为类型创建默认值在类型定义上添加 #[derive(Default)] 或手动实现 default 方法
Hash允许将类型的值用作哈希表的键在类型定义上添加 #[derive(Hash)] 或手动实现 hash 方法
Display允许格式化输出用户面向的信息手动实现 fmt 方法
FromStr允许从字符串解析出类型的值手动实现 from_str 方法
From/Into允许在不同类型之间转换值手动实现 from 或者 into 方法
AsRef/AsMut允许将值转换为引用或可变引用手动实现 as_ref 或者 as_mut 方法
Borrow/BorrowMut允许将值借用为引用或可变引用,通常用于哈希表的键和集合元素的比较和查找。手动实现 borrow 或者 borrow_mut 方法
Deref/DerefMut允许重载解引用运算符(*)以便自定义解引用行为。通常用于智能指针。手动实现deref或deref_mut方法
Iterator表示一个迭代器,可以迭代产生一系列值。通常用于 for 循环和其他迭代操作。手动实现next方法

除此之外,还有一些trait我们也经常用到,是一些 Rust 标准库中I/O相关的 trait:也可以了解一下

Trait 名称用途如何使用
Read允许从字节流中读取数据手动实现 read 方法
Write允许将数据写入字节流手动实现 write 和 flush 方法
Seek允许在字节流中定位手动实现 seek 方法
BufRead允许从缓冲的字节流中读取数据手动实现 fill_buf 和 consume 方法
BufWriter允许将数据写入缓冲的字节流,以提高写入性能使用 BufWriter::new 创建一个新的 BufWriter 实例
BufReader允许从缓冲的字节流中读取数据,以提高读取性能使用 BufReader::new 创建一个新的 BufReader 实例
Cursor允许在内存缓冲区中执行 I/O 操作,通常用于测试使用 Cursor::new 创建一个新的 Cursor 实例
File允许对文件进行 I/O 操作使用 File::open 或者 File::create 打开或创建一个文件
Stdin,Stdout,Stderr分别表示标准输入、标准输出和标准错误流,允许对它们进行 I/O 操作。使用 std::io::stdin(), std::io::stdout(), std::io::stderr() 获取对应的实例

这些 trait 可以通过在类型定义上使用 derive 属性来自动实现,也可以通过手动实现 trait 中的方法来自定义行为。你可以查看 Rust 文档 来获取更多关于这些 trait 的信息。from刘金,转载请注明原文链接。感谢!