Lv777

Lv777

github
twitter
jike
playstation
xiaoyuzhou

モジュール

パッケージ#

パッケージは 1 つまたは複数のクレートから構成される集合です。Cargo プロジェクトはパッケージです。

パッケージには 1 つ以上のバイナリアイテムを含めることができますが、ライブラリは 1 つしか含めることができません。これはなぜですか?公開するためですか。他のバイナリアイテムを作成するには、ファイルをsrc/binディレクトリに配置するだけで、独立したバイナリファイルとしてコンパイルされます。

クレート#

クレートはバイナリアイテムライブラリに分けられます。Cargo が作成するデフォルトのテンプレートには、バイナリアイテムが 1 つだけ含まれています。src/main.rsがエントリーポイントのルートファイルであることが規定されています。Cargo はまた、src/lib.rsをライブラリのルートファイルとして規定しています。

クレートのコンパイルは、必要なコードをルートファイルから探索して行います。

モジュール#

モジュールはクレートのコードをグループ化するために使用され、モジュール内のコードはデフォルトで非公開です。

mod web {
	mod client {
		mod home {}
		fn get_env() {}
	}
	mod server {
		struct DTO {
			id: String
		}
	}
}

パス#

  • 絶対パスは、クレート名(同じクレートではcrateを使用)で始まるフルパスです。
  • 相対パスは、現在のモジュールからselfsuper、およびモジュール名を使用して位置を特定するパスです。

use#

useキーワードを使用してアクセス可能なモジュールをインポートし、そのモジュールのスコープの内容を直接使用することができます。これは JS のimportと似ています。

  • 関数のインポートに関しては、通常は親モジュールをインポートし、呼び出し時に指定することが一般的です。これはcall(this)のような感覚です。
  • 構造体や列挙型などに関しては、完全なパスを参照し、直接使用することが一般的です。
use web::client;

use web::server::DTO;

client.get_env();

DTO {
	id: String::from(""),
};
// 再エクスポート
pub use web::server;
// ネストしたインポート
use web::{self, server::DTO};
// webのすべての公開サブモジュールをインポート
use web::*;

モジュールファイル#

大きなモジュールを複数のファイルに分割することは、読みやすさに役立ちます。これはフロントエンドのモジュール化の考え方と一致しています。

web
├── client
│	└── home.rs
└── server.rs
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。