模組是一種把相關程式碼分組的方式,可以避免名稱衝突;除了最簡單的程式碼庫之外,幾乎所有專案都會用到模組。
語法如下:
mod my_module {
pub struct MyStruct {}
pub struct OtherClass {}
}
在模組的作用域之外,取用模組內的型別時,需要在型別名稱前面加上雙冒號::。
或者,更常見的做法是在檔案開頭(或模組內)放一個use指示,之後使用型別時就不需要加前綴。
在同一個模組內,則不需要為型別名稱加上限定前綴。
mod my_module {
#[derive(Drop)]
pub struct MyStruct {}
pub struct Foo {}
#[generate_trait]
pub impl FooImpl of FooTrait {
fn bar() {
let baz = MyStruct {};
}
}
}
#[derive(Drop)]
pub struct Qux {}
#[generate_trait]
impl QuxImpl of QuxTrait {
fn box() {
let nux = my_module::MyStruct {};
}
}
mod other_module {
use super::my_module::*;
#[derive(Drop)]
pub struct Tix {}
#[generate_trait]
pub impl TixImpl of TixTrait {
fn jeg() {
let lor = MyStruct {};
}
}
}
你可以用use core::array::ArrayTrait as Arr;這樣的語法,為模組或型別取一個別名,之後只要是可以使用該模組或型別的地方,都能改用這個別名。
管理階層開始把達爾文式原則套用到遙控車專案上。開發者已被分成 Red 和 Blue 兩個團隊,並被要求各自獨立改進設計。他們不需要理會另一個團隊的設計決策。你被要求看看這些程式碼,想想怎麼為了測試目的,最好地把這兩份成果合併起來。
請使用模組,更適切地表達程式碼的意圖。
目前,重要的型別像是Motor和Telemetry,更不用說RemoteControlCar本身,都加上了對應團隊顏色的前綴<Color>RemoteControlCarTeam。這個前綴唯一的用途,就是讓同名的型別能在同一個程式裡並存。改用模組可以更好地表達這件事。你會發現,就這些用途來說,模組比為型別加前綴更有優勢。
管理階層要求團隊在定義中必須叫做「Red Remote Control Car Team」和「Blue Remote Control Car Team」,而且這些長名稱甚至必須直接用在程式碼本身。不過在引用團隊時,這些名稱顯得相當累贅。
請設法在你用來打造車輛的模組裡,改用較短的識別名稱「Red」和「Blue」。