2016-06-28 9 views

risposta

7

In caso di tipi semplici, come nell'esempio, non sembra esserci alcuna differenza semantica. Inoltre, v'è un analogo diretto con use a pub type, è pub use:

// will be available to other modules 
pub use hyper::status::StatusCode as Error; 

Tuttavia, esistono differenze nei casi più complessi. Ad esempio, è possibile definire gli alias di tipo generico o alias per i tipi generici specializzati:

type Result<T> = ::std::result::Result<T, MyError>; 

type OptionI32 = Option<i32>; 

L'idea generale è che di solito si usa tipo alias perché sono più potenti e suggeriscono l'intento più chiaramente, come con Result, e si utilizza use .. as .. quando si desidera importare solo quel nome specifico, ma è in conflitto con qualcosa che è già nello spazio dei nomi corrente:

use std::io::Read as StdRead; 

trait Read: StdRead { ... } 

noti che usare identificatori di percorso qualificato dovrebbe essere preferito a use ridenominazione. Quanto sopra è meglio scritto come

use std::io; 

trait Read: io::Read { ... } 

(a meno che non Read metodi sono utilizzati per un certo tipo concreto nello stesso file, ovviamente).

L'utilizzo di use .. as .. come sostituto di type (nel caso in cui sia possibile) è raro e penso che dovrebbe essere evitato.

Problemi correlati