W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
ch07-05-separating-modules-into-different-files.md
commit d5584fb1efeaf8aadfc7caf516df7f1ca0820ceb
到目前為止,本章所有的例子都在一個文件中定義多個模塊。當模塊變得更大時,你可能想要將它們的定義移動到單獨的文件中,從而使代碼更容易閱讀。
例如,我們從示例 7-17 開始,將 front_of_house
模塊移動到屬于它自己的文件 src/front_of_house.rs 中,通過改變 crate 根文件,使其包含示例 7-21 所示的代碼。在這個例子中,crate 根文件是 src/lib.rs,這也同樣適用于以 src/main.rs 為 crate 根文件的二進制 crate
項。
文件名: src/lib.rs
mod front_of_house;
pub use crate::front_of_house::hosting;
pub fn eat_at_restaurant() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}
示例 7-21: 聲明 front_of_house
模塊,其內(nèi)容將位于 src/front_of_house.rs
src/front_of_house.rs 會獲取 front_of_house
模塊的定義內(nèi)容,如示例 7-22 所示。
文件名: src/front_of_house.rs
pub mod hosting {
pub fn add_to_waitlist() {}
}
示例 7-22: 在 src/front_of_house.rs 中定義 ?front_of_house
?模塊
在 mod front_of_house
后使用分號,而不是代碼塊,這將告訴 Rust 在另一個與模塊同名的文件中加載模塊的內(nèi)容。繼續(xù)重構(gòu)我們例子,將 hosting
模塊也提取到其自己的文件中,僅對 src/front_of_house.rs 包含 hosting
模塊的聲明進行修改:
文件名: src/front_of_house.rs
pub mod hosting;
接著我們創(chuàng)建一個 src/front_of_house 目錄和一個包含 hosting
模塊定義的 src/front_of_house/hosting.rs 文件:
文件名: src/front_of_house/hosting.rs
pub fn add_to_waitlist() {}
模塊樹依然保持相同,eat_at_restaurant
中的函數(shù)調(diào)用也無需修改繼續(xù)保持有效,即便其定義存在于不同的文件中。這個技巧讓你可以在模塊代碼增長時,將它們移動到新文件中。
注意,src/lib.rs 中的 pub use crate::front_of_house::hosting
語句是沒有改變的,在文件作為 crate 的一部分而編譯時,use
不會有任何影響。mod
關(guān)鍵字聲明了模塊,Rust 會在與模塊同名的文件中查找模塊的代碼。
Rust 提供了將包分成多個 crate,將 crate 分成模塊,以及通過指定絕對或相對路徑從一個模塊引用另一個模塊中定義的項的方式。你可以通過使用 use
語句將路徑引入作用域,這樣在多次使用時可以使用更短的路徑。模塊定義的代碼默認是私有的,不過可以選擇增加 pub
關(guān)鍵字使其定義變?yōu)楣小?
接下來,讓我們看看一些標準庫提供的集合數(shù)據(jù)類型,你可以利用它們編寫出漂亮整潔的代碼。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: