2015-11-14 36 views
4

從文檔中,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,但我只是很好奇爲什麼借入的值不能充當索引。

回答

4

借入價值可以是一個非常好的指數,並且Index特徵的定義允許這樣做。只需使用引用作爲索引類型。廢話例如:

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

所以按值傳遞指數「限購」是不是一個真正的限制,在所有的,因爲它允許執行Index選擇,如果指數應通過值或引用傳遞的人。

+0

D'oh,這是有道理的。謝謝你清理那個。 – jobo3208

+0

如果我沒有弄錯,那正是限制'Idx:?Sized'的意思,不是嗎? – rodrigo

+0

Rust有計劃允許通過值*傳遞動態大小的類型到函數,但這還不行(至於Rust 1.4.0),因此爲什麼['FnBox'](https://doc.rust-lang .org/stable/std/boxed/trait.FnBox.html)存在。實施此操作時,'Idx:?Sized'將允許將DST用於'Idx'。 –

相關問題