为什么索引 Vec return 是一个值而不是索引所承诺的引用?
Why does indexing a Vec return a value instead of a reference as promised by the Index?
Index
特性的文档说 .index()
方法 returns 对 Output
关联类型的引用 (link):
fn index(&self, index: Idx) -> &Self::Output;
对于 Vec<T>
和 usize
索引,Output
是 T
。因此,我希望以下代码段中的变量 a
具有 &i32
.
类型
let v = vec![0];
let a = v[0];
然而,a
的类型是i32
。为什么?我正在学习 Rust,据我所知,Rust 要求你在任何地方都是显式的,并且从不隐式执行 value<->reference
转换。因此问题。
括号为 de-sugared 时添加了自动取消引用。 std::ops::Index
documentation 表示,“container[index]
实际上是 *container.index(index)
的语法糖。”
Index
特性的文档说 .index()
方法 returns 对 Output
关联类型的引用 (link):
fn index(&self, index: Idx) -> &Self::Output;
对于 Vec<T>
和 usize
索引,Output
是 T
。因此,我希望以下代码段中的变量 a
具有 &i32
.
let v = vec![0];
let a = v[0];
然而,a
的类型是i32
。为什么?我正在学习 Rust,据我所知,Rust 要求你在任何地方都是显式的,并且从不隐式执行 value<->reference
转换。因此问题。
括号为 de-sugared 时添加了自动取消引用。 std::ops::Index
documentation 表示,“container[index]
实际上是 *container.index(index)
的语法糖。”