我在doc中检查了索引特征,并找到index()
的返回类型是&T
。
然后我写这个函数来从vector得到值:
fn get_value_test(a: usize, v: &Vec<i32>) -> i32 {
v[a]
}
我的问题是:为什么v[a]
是i32
而&i32
?因为i32
...have a known size at compile time are stored entirely on the stack, so copies of the actual values are quick to make
? (来自here)
看起来Rust在这种情况下有隐藏规则来转换类型吗?
答案 0 :(得分:8)
这里有一个小误导。虽然Index<Idx>
的方法原型为fn index(&self, index: Idx) -> &T
,但语法运算符x[i]
确实取消引用&T
的输出:
container[index]
实际上是*container.index(index)
[...]的语法糖。如果let value = v[index]
的类型实现value
,则可以使用Copy
这样的好东西。
所以你去吧。您的函数确实从向量返回值的副本,但不是从隐式转换返回。如果原始意图是真正检索对该值的引用,那么您将执行&x[i]
。
另见: