クレートとモジュールについて調べる
クレート
- パッケージのことをクレートと呼ぶ
- 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