2016-09-15 49 views
0

我有一個實現另一個性狀的特質的成員的類型要求:穿上特質實施

trait RandomAccessIterator : Sub + VariousOthers {} 

如何指定,對於這種特質的所有實現,減法的結果(Sub中的Output類型)必須是某種類型,例如isize?這樣,如果我編寫一個使用實現此特徵的對象的泛型函數,我知道(更重要的是,編譯器知道)A - B的結果是isize

+1

'特徵RandomAccessIterator:Sub + VariousOthers + Sized {}'不工作?你沒有提供任何代碼來顯示你已經嘗試過的*失敗。我希望有更多來自這個70k聲望的人:-(。 – Shepmaster

+0

@Shepmaster:是的,那是有效的,謝謝,我不知道如何顯示我的失敗嘗試會幫助你回答這個問題。以前沒有意識到,我可以對語法進行百次猜測,這對你有什麼幫助嗎? –

+3

失敗的嘗試可能會有代碼在需求成功實現時開始工作。以驗證我的猜測是否真的有效,另外,[預計你會發現你在提問之前花費了很多功夫](http://meta.stackoverflow.com/q/261592/155423),包括你自己的代碼嘗試,但也是搜索你在SO和其他地方在互聯網上做了什麼搜索。沒有所有這些,問題轉移到「代碼破碎,你修復?」另見:[MCVE]。 – Shepmaster

回答

2
trait RandomAccessIterator : Sub<Output = isize> + VariousOthers {} 

正如The Rust Programming Language章中的部分大約爲associated types討論trait objects with associated types

N=Node語法允許我們提供一個具體類型,Node,對於N類型參數。同E=Edge。如果我們沒有提供這個約束,我們不能確定哪個impl與這個特徵對象匹配。

雖然這不是一個特徵對象,但同樣的語法也適用。大多數人碰到這個when using operators like Mul