哪些特征通过 `Deref`,哪些不通过?

问题描述 投票:0回答:2

假设我有一个新类型

pub struct A(Vec<u32>);

假设我在其上实现了

Deref
以访问内部的向量。令我惊讶的是,这使我能够索引到
A
类型的对象并索引包含的向量。但它不允许我比较或相等测试类型 A 的对象。所以
Index
特征似乎通过 deref 但
PartialEq
PartialOrd
不(游乐场链接)。

为什么?除了实验,我如何判断哪些特征通过了哪些不通过?

rust traits
2个回答
1
投票

特质并没有真正通过

Deref
。只是 Rust 在很多地方插入了 deref 操作符
*
。查看方法调用参考,了解它如何与方法语法一起工作
.
,这应该可以帮助您理解看似内置的东西只是语法糖。

我相信索引语法基本相同,所以当你写

a1[1]

变成

*std::ops::Index::index(&*a1, 1)

0
投票

检查编译器的源代码?

好吧,这可能并不比实验容易,但我们来了……

autoderef 的唯一运算符是调用运算符

()
、点运算符
.
和索引运算符
[]
。所有其他运营商都没有。

© www.soinside.com 2019 - 2024. All rights reserved.