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::*というようにワイルドカードを含めることができます。この方法は、どのアイテムがインポートされるのかが明確ではなく、時間の経過とともに変化する可能性があるため、おすすめしません。