記事ディレクトリ
0 インポート
コードを体系化できないプログラミング言語では、深く掘り下げることが難しく、ソース ファイルからコンパイルされるソフトウェア製品はほとんどありません。このチュートリアルのこれまでのすべてのプログラムは、主に Rust 言語の構文と概念を学習するのに便利なように、1 つのファイルに書かれています。プロジェクトにとって、コードを整理することは非常に重要です。Rust には、クレート、パッケージ、モジュールという3 つの重要な組織概念があります。
1. 組織コンセプト
以下、徐々に大きくなる大小関係に従って説明します。
1.1.ボックス
1. 「ボックス」とは、「パッケージ」内に存在するバイナリのプログラムファイルまたはライブラリファイルです。
2. 「ボックス」はツリー構造になっており、そのルートはコンパイラの起動時にコンパイルされるソースファイルによってコンパイルされるプログラムです。
3. 注: 「バイナリプログラムファイル」は必ずしも「バイナリ実行ファイル」を意味するものではなく、ターゲットの機械語が含まれているファイルであると判断できます。ファイル形式はコンパイル環境によって異なります。
1. 2. パッケージ
1. Cargo を使用して新しいコマンドを実行して Rust プロジェクトを作成すると、プロジェクト ディレクトリに Cargo.toml ファイルが作成されます。プロジェクトの本質はパッケージであり、そのパッケージは、パッケージの基本情報と依存関係を記述する Cargo.toml ファイルによって管理する必要があります。
2. パッケージには最大 1 つのライブラリ「ボックス」が含まれ、任意の数のバイナリ「ボックス」を含めることができますが、少なくとも 1 つの「ボックス」(ライブラリまたはバイナリ「ボックス」) を含めることができます。
3. Cargo new コマンドを使用してパッケージを作成した後、main.rs ソース ファイルが src ディレクトリに生成されます。Cargo はデフォルトでこのファイルをバイナリ ボックスのルートとして設定し、コンパイルされたバイナリ ボックスは次と同じ名前になります。その包み。
1.3.モジュール
1. ソフトウェア プロジェクトの場合、使用するプログラミング言語の組織仕様に従ってプロジェクトを編成することが多く、組織モジュールの主な構造はツリーであることがよくあります。2. Java で機能モジュールを編成する主な単位はクラスですが、JavaScript でモジュールを編成する主な方法は関数です。
これらの高度な言語の組織単位は、ファイル システムのディレクトリ構造と同じように、レイヤーごとに含めることができます。Rust の組織単位はモジュールです。
3. ファイル システムでは、ディレクトリ構造ではパス文字列内のオブジェクトの位置を示すためにスラッシュがよく使用されます (Rust のパス区切り文字は ::)。
パスは絶対パスと相対パスに分けられます。crateキーワードから絶対パスを記述します。self、superキーワード、または識別子を起点とした相対パスを記述します。
mod nation {
mod government {
fn govern() {
}
}
mod congress {
fn legislate() {
}
}
mod court {
fn judicial() {
}
}
}
//访问时候可以使用 相对路径也可以使用绝对路径
crate::nation::government::govern(); //绝对
nation::government::govern(); //相对
2. 組織内の権限
2.1 権限
- Rust には、パブリックとプライベートという 2 つの単純なアクセス権があります。
- デフォルトでは、修飾子を指定しないと、モジュール内のメンバーのアクセスはプライベートになります。
- パブリック権限を使用する場合は、pub キーワードを使用する必要があります。
- プライベート モジュールは、そのピアまたは従属の位置でのみアクセスでき、その外部からはアクセスできません。
- モジュール内で構造体が定義されている場合、構造体自体がプライベートであることに加えて、そのフィールドもデフォルトでプライベートになります。したがって、モジュール内で構造体とそのフィールドを使用したい場合は、pub 宣言が必要です (列挙型にはこのプロパティがありません)。
mod nation {
pub mod government {
pub fn govern() {
}
}
mod congress {
pub fn legislate() {
}
}
mod court {
fn judicial() {
super::congress::legislate();
}
}
}
fn main() {
nation::government::govern();
}
2.2 モジュールのリファレンス
2 つのモジュール test1.rs のコードは次のようになります。
pub fn message() -> String {
String::from("This is the 2nd module.")
}
main.rsコードは次のとおりです
mod test1;
fn main() {
println!("This is the main module.");
println!("{}", second_module::message());
}
これはうまく引用できます。
2.2 キーワードを使用する
use を使用すると、標準ライブラリまたはカスタム ライブラリを参照できます。これはより便利であり、長すぎるローカル モジュール パスの問題を解決します。これは、Python のインポートに少し似ており、C++ の名前空間の使用に似ています。もちろん、エイリアスとして use xxx as を使用することもできます。
コードは次のとおりです (例)。
mod nation {
pub mod government {
pub fn govern() {
}
}
}
use crate::nation::government::govern; // use 过之后
use crate::nation::govern as nation_govern; // 别名
fn main() {
nation_govern();
govern();
}
Rust公式標準ライブラリ辞書: https://doc.rust-lang.org/stable/std/all.html
3. まとめ
Rust 組織管理により、大規模なエンジニアリング建設におけるモジュールをより適切に整理および分割できます。