クレートとモジュールについて調べる
クレート
- パッケージのことをクレートと呼ぶ
- libクレートとbinクレートがある
> libクレートならば
lib.rsが、binクレートならばmain.rsがルートにあたるファイルです
- src/lib.rsとsrc/main.rsを一緒に置くこともできる
- その場合、主要な機能はlib.rs側で書くのが良いっぽい
モジュール
mod でモジュールが作れる
- ネスト可能
- サブモジュールは
:: で参照できる
mod some_module でsome_module.rs かsome_module/mod.rs を参照する
- Intellijでおもむろに
mod some_module と書くと、勝手にsome_module.rs を作ってくれる
some_module_name/mod.rs は作れなさそう
extern crate some_module でsome_module を利用することを宣言する
like-this のように-(ダッシュ)が含まれるクレート名の場合、ダッシュがアンダースコアへ変換されるため extern crate like_thisと書く必要がある
- module内のメソッドは、デフォルトでは外部に公開されない
pub をつけると公開される
struct にpub をつけてもメンバは公開されないので、個別にpubをつける必要がある
use some_module などのようにクレート名/モジュール名/メソッド名を指定すると、記述を省略できる
- これをimportと呼ぶ
- メソッド名をimportすると名前被りまくって死ぬのでやらない
use phrases::english::{greetings, farewells}; のようにまとめて書くこともできる
some_crate のsome_module 内のsome_sub_module がsome_func を持っている場合を考える
- 通常だと
some_crate::some_module::some_sub_module::some_func と書く必要がある
src/some_module/mod.rs でpub use self::some_module::some_sub_module::some_func と書いておくと、some_crate::some_module::some_func で呼べるようになる
pub use self::greetings::* のようにワイルドカードも使える
self とは
use はクレートのルートから絶対パスで表す
self はカレントディレクトリのパスを表す(相対パスの. )
super は一つ上のパスを表す(相対パスの.. )
- メソッドの呼び出しは相対パス
extern crate … as … やuse … as … で、任意の名前でクレートのメソッドを参照できる
- 同一パス下にある複数のモジュール/メソッドへのuseは
{} で一度に書くことができる
Refer
Others
- Intellijでmain関数を書くと左側に三角マークが出てクリックすると実行できた
- 昨日は表示されなかったような。。。
- Debugもあるけど、裏では何が走るんだろう
TODO