比方说我有一种新类型

pub struct A(Vec<u32>);

假设我在它上面实现了Deref,以访问里面的向量.令我惊讶的是,这使我能够索引类型A的对象,并且它索引所包含的向量.但它不允许我比较或相等A类型的测试对象.因此,Index的特征似乎通过了deref,但PartialEqPartialOrd不是(playground link).

为什么?除了实验,我怎么才能分辨出哪些特征通过了,哪些没有呢?

推荐答案

trait 并不能真正通过Deref年.只是铁 rust 会在很多地方插入DEREF操作器*.查看method call reference,看看它如何与方法语法.一起工作,这应该会帮助您理解似乎内置的东西只是语法糖.

我认为索引语法基本上是相同的,所以当您编写

a1[1]

它会变成

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

Rust相关问答推荐

在函数内定义impl和在函数外定义impl的区别

如何在Tauri中将变量从后端传递到前端

异步FN中的 rust 递归

为潜在的下游实现使用泛型绑定而不是没有泛型绑定的trait

在Rust中,如果Result是Err,运行副作用(如日志(log)记录)的惯用方法是什么

如何将像烫手山芋一样不透明的值从一个Enum构造函数移动到下一个构造函数?

如何模拟/创建ReqData以测试Actix Web请求处理程序?

无法实现整型类型的泛型FN

如何获取光标下的像素 colored颜色 ?

Rust 中的静态引用

当推送到 HashMap 中的 Vector 时,类型 `()` 无法取消引用

缺失serde的字段无法设置为默认值

在异步 Rust 中,Future 如何确保它只调用最近的 Waker?

为什么在 rust 中删除 vec 之前应该删除元素

如何使用 rust bindgen 生成的 std_vector

如何在 nom 中构建负前瞻解析器?

使用 rust-sqlx/tokio 时如何取消长时间运行的查询

你能用 Rust 和 winapi 制作 Windows 桌面应用程序吗?

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

为移动和借位的所有组合实现 Add、Sub、Mul、Div