學習軌道
/
Cairo
Cairo
/
練習
/
紅隊對藍隊:達爾文風格
紅隊對藍隊:達爾文風格

紅隊對藍隊:達爾文風格

學習練習

簡介

模組

模組是一種把相關程式碼分組的方式,可以避免名稱衝突;除了最簡單的程式碼庫之外,幾乎所有專案都會用到模組。

語法如下:

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 兩個團隊,並被要求各自獨立改進設計。他們不需要理會另一個團隊的設計決策。你被要求看看這些程式碼,想想怎麼為了測試目的,最好地把這兩份成果合併起來。

1. 找出更適合隔離兩個團隊程式碼的方式

請使用模組,更適切地表達程式碼的意圖。

目前,重要的型別像是Motor和Telemetry,更不用說RemoteControlCar本身,都加上了對應團隊顏色的前綴<Color>RemoteControlCarTeam。這個前綴唯一的用途,就是讓同名的型別能在同一個程式裡並存。改用模組可以更好地表達這件事。你會發現,就這些用途來說,模組比為型別加前綴更有優勢。

2. 簡化命名系統

管理階層要求團隊在定義中必須叫做「Red Remote Control Car Team」和「Blue Remote Control Car Team」,而且這些長名稱甚至必須直接用在程式碼本身。不過在引用團隊時,這些名稱顯得相當累贅。

請設法在你用來打造車輛的模組裡,改用較短的識別名稱「Red」和「Blue」。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Cairo Exercism

準備好開始 紅隊對藍隊:達爾文風格 了嗎?

註冊 Exercism,透過 25 個概念68 個練習 和真人引導來學習並精通 Cairo,全部免費。