Un semplice type Foo = Bar;
fuori di un impl
definisce un tipo alias, ed è documented in The Book. C'è una versione generica type Foo<T> = ...
ma se capisci generici in generale, questa è un'estensione ovvia.
type
in impl
definisce un tipo associato. Sono documented in The Book, ma ho già scritto un breve riassunto, in modo da ottenere che troppo:
Quando si dispone di un tratto come Add
, si vuole astratta non solo su ciò che può essere aggiunto tipi di cose, ma anche oltre il tipo della loro somma. L'aggiunta di interi porta a numeri interi, aggiungendo i risultati float nei float. Ma non vuoi che il tipo di risultato sia un parametro di Add
come in Add<ThingToAdd, ResultType>
, per motivi che mi limiterò a sfiorare qui.
Pertanto, il carattere viene fornito con un tipo associato allo impl
. Data qualsiasi implementazione di Add
, ad esempio impl Add<Foo> for Bar
, il tipo del risultato di aggiunta è già determinato. Questo è dichiarata nel tratto in questo modo:
trait Add<Rhs> {
type Result;
// ...
}
E poi tutte le implementazioni definire ciò che il tipo di loro risultato è:
impl Add<Foo> for Bar {
type Result = BarPlusFoo;
// ...
}