为什么索引方法需要所有权?

时间:2015-11-14 14:32:18

标签: rust

从文档中,定义了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的整数类型的东西,但我只是好奇为什么借用的值不能充当索引。

1 个答案:

答案 0 :(得分:4)

借来的值可以是一个非常好的索引,Index特征的定义允许这样做。只需使用引用作为索引类型。无意义的例子:

impl <'a> Index<&'a IndexType> for Foo {
    type Output = u8;
    fn index(&self, index: &IndexType) -> &u8 {
        unimplemented!()
    }
}

因此,按值传递索引的“限制”实际上并不是一个限制,因为它允许实现Index的人选择是通过值还是通过引用传递索引。