从文档中,定义了Index
特征:
pub trait Index<Idx> where Idx: ?Sized {
type Output: ?Sized;
fn index(&self, index: Idx) -> &Self::Output;
}
由于index
参数的类型为Idx
而非&Idx
,因此index
方法需要获取其传递值的所有权。
这种限制是否有原因?我知道10次中有9次将使用类似于导出Copy
的整数类型的东西,但我只是好奇为什么借用的值不能充当索引。
答案 0 :(得分:4)
借来的值可以是一个非常好的索引,Index
特征的定义允许这样做。只需使用引用作为索引类型。无意义的例子:
impl <'a> Index<&'a IndexType> for Foo {
type Output = u8;
fn index(&self, index: &IndexType) -> &u8 {
unimplemented!()
}
}
因此,按值传递索引的“限制”实际上并不是一个限制,因为它允许实现Index
的人选择是通过值还是通过引用传递索引。