2015-04-04 16 views
15

Ho visto la parola chiave type utilizzata in alcuni esempi di Rust, ma non ho mai visto una spiegazione. Alcuni esempi di come l'ho visto usati:Qual è la parola chiave di tipo Rust?

impl Add<Foo> for Bar { 
    type Output = BarFoo; 
    // omitted 
} 

e questo, taken from the reference:

type T = HashMap<i32,String>; // Type arguments used in a type expression 
let x = id::<i32>(10);  // Type arguments used in a call expression 

Qualcuno potrebbe spiegare che cosa questa parola chiave fa? Non riesco a trovarlo in Rust by Example o nel libro Rust.

risposta

17

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; 
    // ... 
} 
Problemi correlati