2016-03-29 11 views
2

次のようにIterator形質が定義されています何 `でItem`を入力しない` Iterator`は平均トレイト

pub trait Iterator { 
    type Item; 
    fn next(&mut self) -> Option<Self::Item>; 
} 

type Item;は何を意味するのでしょうか?それをどのように呼び出すのですか?

上記の定義はこれと同等ですか?

pub trait Iterator<T> { 
    fn next(&mut self) -> Option<T>; 
} 

このように宣言する理由は同じですか?そしてそれが同じでない場合、違いは何ですか?

+0

*もしそれが違うなら、違いは何ですか?* - [関連付けられた型とジェネリック型を使用するのはいつ適切でしょうか?](http://stackoverflow.com/questions/32059370/when-is-それに関連するタイプ対汎用タイプの使用に適している) – Shepmaster

答えて

2

TLは、DRIteratortype Item;関連タイプです。


錆ジェネリックは、入力と出力の両方のタイプがあります

  • 入力タイプである形質の宣言(trait X<T, U>が入力タイプとしてTUを有する)プラスSelf(コンクリートタイプのために指定されたもの
  • 出力タイプは、形質の定義で指定されたもので、type X;

関連項目を導入したRFCはRFC 195: Associated Itemsです。具体的には、そのmotivationセクションには、関連する形質があるという利点が挙げられます。

私にとって、最も重要な点は、単一性ある:単一タイプは、きれい例えばDeref又はIndex形質に電力を供給可能形質、任意の所与の実装のために定義されています。 DerefまたはIndexが多くの可能な型をもたらす可能性がある世界では、型推論はさらに複雑になります。

関連する問題