use、super、self
モジュールは、use
を使用して別のモジュールのシンボルをスコープに取り込むことができます。次のような記述はモジュールの先頭においてよく見られます。
use std::collections::HashSet; use std::process::abort;
パス
パスは次のように解決されます。
-
相対パスの場合:
foo
またはself::foo
は、現在のモジュール内のfoo
を参照します。super::foo
は、親モジュール内のfoo
を参照します。
-
絶対パスの場合:
crate::foo
は、現在のクレートのルート内のfoo
を参照します。bar::foo
は、bar
クレート内のfoo
を参照します。
This slide should take about 8 minutes.
-
シンボルは、より短いパスで「再エクスポート」するのが一般的です。たとえば、クレート内の最上位の
lib.rs
に、以下のように記述します。mod storage; pub use storage::disk::DiskStorage; pub use storage::network::NetworkStorage;
これにより、短く使いやすいパスを使用して、
DiskStorage
とNetworkStorage
を他のクレートで使用できるようになります。 -
ほとんどの場合、
use
を指定する必要があるのはモジュール内で実際に直接使用されるアイテムのみです。ただし、あるトレイトを実装する型がすでにスコープに含まれている場合でも、そのトレイトのメソッドを呼び出すには、そのトレイトがスコープに含まれている必要があります。たとえば、Read
トレイトを実装する型でread_to_string
メソッドを使用するには、use std::io::Read
という記述が必要になります。 -
use
ステートメントにはuse std::io::*
というようにワイルドカードを含めることができます。この方法は、どのアイテムがインポートされるのかが明確ではなく、時間の経過とともに変化する可能性があるため、おすすめしません。