目錄和模組組織
阿新 • • 發佈:2021-02-08
目錄和模組組織
提示
所有帖子都會不定期新增補充實戰過程中發現的新內容,力爭一篇文章涵蓋所有內容,避免你多次查詢文章,所以最好點贊或收藏,時不時回來看看。
廢話
我們寫程式,總會分目錄和modules,rust裡有packages、crates、modules這幾個組織關係,
packages: 通過cargo new 建立;
crates: 通過cargo new --lib 建立;
modules: 通過關鍵字mod定義;
下面以實際例子說說rust裡是如何組織目錄和模組的。
程式碼檔案目錄結構
假如我們的程式程式碼由主程式和一個Lib組成,通過cargo new windows和cargo new --lib hc建立後都放在pro目錄下,各自的檔案結構目錄如下
為了使用hc這個lib下的檔案,需要在windows目錄下的Cargo.toml裡標明lib位置:
[dependencies]
hc = {version = "1.0", path = "../hc"}
各檔案內容依次如下,我儘量把各種相互引用的情況都寫在了裡面,看不明白的請留言
hc目錄下的檔案
//檔案 hc\src\buttons.rs
use crate::controls;
pub struct Button {
text: String,
}
pub struct ImageButton {
button: Button,
}
//檔案 hc\src\controls.rs
use crate::buttons::{Button, ImageButton};
//檔案 hc\src\lib.rs
pub mod buttons;
pub mod controls;
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
windows目錄下的檔案,其中mod.rs是用來對外公開其所在目錄裡的檔案(main.rs和lib.rs其實也有這個功能)
//檔案 windows\src\api\mod.rs
pub mod write;
pub mod read;
//檔案 windows\src\api\read.rs
use write;
pub struct Read {
}
//檔案 windows\src\api\write.rs
use super::super::form;
use super::read; // super表示api
pub struct Write {
}
pub mod writebyte { // 內部的子模組,pub表示對外暴露
pub struct WriteByte {
}
}
//檔案 windows\src\form.rs
use crate::gdigraphics::{GDICanvas,};
pub struct Form {
}
//檔案 windows\src\gdigraphics.rs
use hc::buttons::{Button, ImageButton};
pub struct GDICanvas {
}
//檔案 windows\src\main.rs
pub mod form;
mod gdigraphics;
mod api;
use api::write;
use api::write::writebyte;
use self::form::Form;
use crate::gdigraphics::GDICanvas;
fn main() {
}