Ich bin neu bei Rust. Ich denke, das use
wird verwendet, um Bezeichner in den aktuellen Bereich zu importieren und extern
um ein externes Modul zu deklarieren. Aber dieses Verständnis (vielleicht falsch) ergibt für mich keinen Sinn. Kann jemand erklären, warum Rust diese beiden Konzepte hat und welche Fälle geeignet sind, um sie zu verwenden?
80
extern crate foo;
? Kisten und Module sind separate Konzepte in Rust. Vielleicht möchten Sie einen Blick auf "Grundlegende Terminologie: Kisten und Module" werfen , der den Unterschied zwischen den beiden erklärt (ich persönlich finde die folgenden Beispiele jedoch sehr ausführlich).Antworten:
extern crate foo
Gibt an, dass Sie eine Verknüpfung zu einer externen Bibliothek herstellen möchten, und bringt den Kistennamen der obersten Ebene in den Gültigkeitsbereich (entsprichtuse foo
). Ab Rust 2018 müssen Sie in den meisten Fällen nichtextern crate
mehr verwenden, da Cargo den Compiler darüber informiert, welche Kisten vorhanden sind. (Es gibt ein oder zwei Ausnahmen )use bar
ist eine Abkürzung für die Referenzierung vollqualifizierter Symbole.Theoretisch ist die Sprache nicht brauchen
use
- man kann immer nur voll qualifizieren , die Namen, aber Typisierungstd::collections::HashMap.new(...)
wäre sehr langweilig bekommen! Stattdessen können Sie nuruse std::collections::HashMap
einmal eingeben und werden dann daraufHashMap
verweisen.quelle
use
könnten wir nicht einmalstd
die Fassade haben , die es ist. Entweder hätten wir eine einzige monolithische Standardbibliothekskiste, oder jeder würde sich mit der Tatsache befassen, dass diesString
tatsächlich der Fall istcollections::string::String
.Die akzeptierte Antwort war zum Zeitpunkt des Schreibens korrekt. Es ist jedoch nicht mehr richtig.
extern crate
wird seit Rust 2018 fast nie mehr benötigt.Sie müssen jetzt nur noch externe Abhängigkeiten zu Ihrer Cargo.toml hinzufügen.
use
funktioniert genauso wie zuvor.Lesen Sie mehr in der offiziellen Dokumentation .
Bearbeiten: Die akzeptierte Antwort wurde jetzt bearbeitet, um die Änderungen in Rust 2018 korrekt wiederzugeben.
quelle
extern crate failure;
aberuse std::error::Error