Rustは初めてです。これは、use
識別子を現在のスコープにインポートextern
するために使用され、外部モジュールを宣言するために使用されると思います。しかし、この理解(おそらく間違っている)は私には意味がありません。Rustがこれらの2つの概念を持っている理由と、それらを使用するのに適したケースは何かを誰かが説明できますか?
回答:
extern crate foo
外部ライブラリに対してリンクすることを示し、最上位のクレート名をスコープに入れます(と同等use foo
)。Rust 2018の時点では、Cargoがコンパイラにどのクレートが存在するかを通知するため、ほとんどの場合、使用する必要はありextern crate
ません。(1つまたは2つの例外があります)
use bar
完全修飾記号を参照するための省略形です。
理論的には、言語は必要あり ません。use
名前を完全修飾することはいつでも可能ですが、入力std::collections::HashMap.new(...)
は非常に面倒になります。代わりに、use std::collections::HashMap
一度入力するだけで、それHashMap
を参照できます。
受け入れられた答えは、執筆時点で正しかった。しかし、それはもはや正しくありません。
extern crate
Rust 2018以降、ほとんど必要ありません。
これで、Cargo.tomlに外部依存関係を追加するだけで済みます。
use
以前と同じように機能します。
詳細については、公式ドキュメントをご覧ください。
編集:承認された回答は、Rust2018での変更を正しく反映するように編集されました。
extern crate failure;
けどuse std::error::Error
extern crate foo;
ますか?クレートとモジュールはRustの別個の概念です。この2つの違いを説明する「基本的な用語:クレートとモジュール」を参照してください(個人的には、以下の例は非常に冗長です)。