比方说我有一种新类型
pub struct A(Vec<u32>);
假设我在它上面实现了Deref
,以访问里面的向量.令我惊讶的是,这使我能够索引类型A
的对象,并且它索引所包含的向量.但它不允许我比较或相等A类型的测试对象.因此,Index
的特征似乎通过了deref,但PartialEq
或PartialOrd
不是(playground link).
为什么?除了实验,我怎么才能分辨出哪些特征通过了,哪些没有呢?
比方说我有一种新类型
pub struct A(Vec<u32>);
假设我在它上面实现了Deref
,以访问里面的向量.令我惊讶的是,这使我能够索引类型A
的对象,并且它索引所包含的向量.但它不允许我比较或相等A类型的测试对象.因此,Index
的特征似乎通过了deref,但PartialEq
或PartialOrd
不是(playground link).
为什么?除了实验,我怎么才能分辨出哪些特征通过了,哪些没有呢?
trait 并不能真正通过Deref
年.只是铁 rust 会在很多地方插入DEREF操作器*
.查看method call reference,看看它如何与方法语法.
一起工作,这应该会帮助您理解似乎内置的东西只是语法糖.
我认为索引语法基本上是相同的,所以当您编写
a1[1]
它会变成
*std::ops::Index::index(&*a1, 1)