2015-04-02 18 views
6

Sono nuovo di Rust. Penso che use venga utilizzato per importare identificatori nell'attuale ambito e extern viene utilizzato per dichiarare un modulo esterno. Ma questa comprensione (forse sbagliata) non ha alcun senso per me. Qualcuno può spiegare perché Rust ha questi due concetti e quali sono i casi adatti per usarli?Qual è la differenza tra l'uso e l'extern?

+3

Ti riferisci alla frase 'extern crate foo;'? Casse e moduli sono concetti separati in Rust, potresti dare un'occhiata a ["Terminologia di base: casse e moduli"] (http://doc.rust-lang.org/1.0.0-alpha.2/book/ crates-and-modules.html) che spiega la differenza tra i due (personalmente trovo gli esempi in basso eccessivamente prolissi). –

risposta

6

extern crate foo indica che si desidera eseguire il collegamento a una libreria esterna e portare il nome della cassa di livello superiore in ambito (use foo). use bar è essenzialmente una scorciatoia per referenziare simboli pienamente qualificati.

In teoria, la lingua non è necessariouse - è sempre possibile qualificare completamente i nomi. Ma digitare std::str::String.new(...) diventerebbe molto noioso! Invece, è sufficiente digitare use std::str::String una volta e quindi fare riferimento a String. (La dichiarazione use per String fa parte del preludio, quindi di solito non vedi che)

La lingua fa necessità extern - è così che si informa il compilatore che si sta per collegare contro una cassa che isn Sei il tuo.

+1

Senza 'use', non potremmo nemmeno avere' std' come facciata. O avremmo un'unica cassa libreria monolitica standard, o tutti avrebbero a che fare con il fatto che 'String' è in realtà' collections :: string :: String'. – delnan

Problemi correlati