2016-03-29 13 views
2

şöyle Iterator özellik tanımlanır:Ne `in Item` yazın gelmez` Iterator` ortalama trait

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

type Item; ne anlama geliyor? Ve nasıl adlandırılır?

Yukarıdaki tanım buna eşdeğer mi?

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

Aynı şekilde, neden bu şekilde bildirilsin? Ve eğer aynı değilse, o zaman fark nedir?

+0

* Ve aynı değilse, o zaman fark nedir? * - [Genel bir türe karşı ilişkili bir tür kullanmak ne zaman uygundur?] (Http://stackoverflow.com/questions/32059370/when-is- Bu-uygun-kullanımlı bir ilişkili tip-versus-a-jenerik-tip) – Shepmaster

cevap

2

TL; DR: Iterator yılında type Item; bir ilişkili türüdür.


Pas jenerik iki giriş ve çıkış türleri:

  • giriş türleri olan özellik beyanı (trait X<T, U> giriş türleri T ve U sahiptir) artı Self (beton türü için belirtilenler özelliği type X;
ile
  • çıkış türleri bu özellik tanımında belirtilen) uygulanmakta olan

    İlişkili öğeleri tanıtan RFC, RFC 195: Associated Items. Spesifik olarak, motivation bölümü, ilişkili özelliklere sahip olmanın faydalarını belirtmektedir.

    Benim için en önemli nokta, olmakadır: tek bir tip temiz örneğin Deref veya Index özelliği güç sağlar özellik, verilen herhangi bir uygulama için tanımlandığı gibidir. Deref veya Index'un olası birçok türde olabileceği bir dünyada, çıkarım daha da karmaşık olabilir.