假设我有一个新类型
pub struct A(Vec<u32>);
假设我在其上实现了
Deref
以访问内部的向量。令我惊讶的是,这使我能够索引到 A
类型的对象并索引包含的向量。但它不允许我比较或相等测试类型 A 的对象。所以 Index
特征似乎通过 deref 但 PartialEq
或 PartialOrd
不(游乐场链接)。
为什么?除了实验,我如何判断哪些特征通过了哪些不通过?
特质并没有真正通过
Deref
。只是 Rust 在很多地方插入了 deref 操作符 *
。查看方法调用参考,了解它如何与方法语法一起工作.
,这应该可以帮助您理解看似内置的东西只是语法糖。
我相信索引语法基本相同,所以当你写
a1[1]
变成
*std::ops::Index::index(&*a1, 1)
检查编译器的源代码?
好吧,这可能并不比实验容易,但我们来了……
autoderef 的唯一运算符是调用运算符
()
、点运算符.
和索引运算符[]
。所有其他运营商都没有。