11|常见trait解析:标准库中的常见trait应该怎么用?
标准库中的常用 trait
Default
- 深入了解
- 翻译
- 解释
- 总结
Rust标准库中的trait扮演着重要角色,包括Default、Display、ToString、Debug、PartialEq、Eq、PartialOrd、Ord、Clone、Copy、ToOwned、Deref、Drop、闭包相关trait、From、Into、TryFrom、TryInto、FromStr等。这些trait在Rust中扮演着重要的角色,了解它们有助于更好地理解和应用Rust语言。`AsRef<T>` trait的定义类似`AsRef<T>`的特点是将自身的引用转换成目标类型的引用,相对于`Deref`,`as_ref()`需要显式调用,使代码更清晰,减少出错机会。这些trait构成了Rust生态的基础,赋予Rust强大的表达力和灵活性。trait的设计使得新特性的添加不会对语言本身造成沉重的负担。通过学习这些trait,读者可以更深刻地理解Rust语言的强大之处。
《Rust 语言从入门到实战》,新⼈⾸单¥59
全部留言(9)
- 最新
- 精选
- 飞了的鸭子被煮了asref: A 到 B, deref:B回到A
作者回复: 🈶意思👍
2024-01-27归属地:美国1 - Zoom 6Deref 是重载了运算符,AsRef是做的类型转换
作者回复: 👍
2024-01-04归属地:江苏1 - LukeDeref 和 AsRef<T> 是 Rust 中用于类型转换的 trait。 Deref trait 允许你重载解引用操作符 *,使得一个类型可以被像指针一样解引用。这样可以方便地访问类型内部的数据。当你对一个实现了 Deref trait 的类型使用解引用操作符时,编译器会自动调用 Deref trait 中的 deref 方法来获取对应的值。 AsRef<T> trait 则是用于将一个类型转换为另一个类型的引用。它提供了一个 as_ref 方法,该方法返回一个指向目标类型的引用。这在需要将一个类型转换为另一个类型的引用时非常有用,例如将字符串转换为字节切片。 总结一下区别: Deref trait 用于重载解引用操作符 *,使得一个类型可以被像指针一样解引用。 AsRef<T> trait 用于将一个类型转换为另一个类型的引用。 在使用上,如果你需要对一个类型进行解引用操作,你可以实现 Deref trait。如果你需要将一个类型转换为另一个类型的引用,你可以实现 AsRef<T> trait。
作者回复: 👏
2023-12-22归属地:上海1 - 兰天白云老师,您在讲到from和into的时候,说“因为 into() 是方法,而 from() 是关联函数。”,而在trait声明里都是有返回值的呀?该怎样理解呢?
作者回复: 方法由实例调用,用 . ,关联函数由类型调用,用 :: ,区别不在有没有返回值。
2024-02-22归属地:海南 - My dream能讲一下在trait中如何使用async fn吗?我还不会使用
作者回复: 可以看看这篇. https://blog.rust-lang.org/inside-rust/2023/05/03/stabilizing-async-fn-in-trait.html 还有刚发布的稳定版本: https://blog.rust-lang.org/2023/12/28/Rust-1.75.0.html 用法跟单独写 async fn 现在是一样的.
2023-12-30归属地:四川 - superggnas_ref 没印象了, 找gpt4看了看, 总结了下核心就这俩: - implicit vs explicit - Deref trait 自动运行, `*T` 直接触发 deref(), 看起来像是隐式触发 - AsRef trait 需要显式调用 as_ref() - 功能不同(我看到这条的时候都愣了, 这谁不知道, 为撒还算是 key diff) - Deref 是解引用的 - AsRef 是创建引用的
作者回复: 哈哈。gpt4有趣的。
2023-12-15归属地:北京 - 刘丹请问下面这一句,能否只写Ord和Eq?Ord是PartialOrd的超集, Eq是PartialEq的超集。 编译器应该可以判断出,已经实现了Ord和Eq,当然也肯定实现了PartialOrd和PartialEq。 #[derive(Ord, PartialOrd, PartialEq, Eq)] // 注意这一句,4个都写上
作者回复: 不能,Rust编译器就是要让你多写一点。文中有说明类似的原因。主要是怕你滥用。
2023-11-13归属地:广东 - 杨赛军Deref 不能传递所有权变量,Asref可以传递所有权变量
作者回复: 有这个意思在里面,Deref需要通过其它操作符隐式触发,如 &, . 等,并且做的是自动 & 操作。
2023-11-13归属地:北京 - superggn笔记 1. Deref trait => 给 typeA 实现了 Deref trait 之后就可以 *typeAinstance 了 2. deref coercion => 我们要对 obj_0 做一些事情的时候, 如果发现 obj_0 不适配, 就试一下 *obj_0, 看看它的 deref 是否适配, 如果适配, 就对 deref result 搞事, 如果不适配, 就继续找 deref, 直到当前 obj 没有 deref 为止2023-12-15归属地:北京2