iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Software Development

Rust的多方面運用系列 第 8

[Day8] impl 以及 mod (將程式碼放在不同檔案使用)

  • 分享至 

  • xImage
  •  

我好怕我起床已經明天了,所以先來打文吧。
廢話不多說,開始今天的內容。


impl 由於我自己不太會使用其他語言中的 class 所以其實我不太知道他跟其他語言的 class 差別在哪,有知道的可以在底下留言 這絕對不是釣魚讓人留言

struct Box {
    weight: i32,
    height: i32,
    length: i32,
}

impl Box {
    fn how_big(&self) -> i32 {
        self.height * self.length * self.weight
    }
}


fn main() {
    let st = Box {
        weight: 50,
        height: 30,
        length: 10,
    };
    println!("{}", st.how_big());
}

這次平台使用的是 Windows 11 但是因為是介紹語法所以應該沒差 (?
上面的範例可以看到,我定義出了一個 Struct Box 然後建立一個 Box 的 impl
要注意的是 box 是智慧指標的關鍵字,請不要誤用。
後面的話會發現說,定義出了一個名為 st 的 Box 架構變數,那下面則是直接 print 出來要得體積,可以發現說其實只要多加一個點就可以了。
也就是就像取值一樣使用就可以了。記得加括號,畢竟還是呼叫函式。
那可能有些人會想到說,是不是只能這樣綁定一個 impl 後面就不能再額外定義了
這個問題的結果是,他可以創建出無限同 struct 的 impl 所以這點理應是沒有任何問題的。

如果用的跟我一樣是 IDEA 那應該會收到這個補全。 直接套用即可。

fn new(a: i32, b: i32, c: i32) -> Box {
    Box {
        weight: a,
        height: b,
        length: c,
    }
}

也可以把這個函數塞在 impl 裡,就能夠透過,這個直接創造一個新的 Box
按照範例上的寫會變成這樣

以上 大概就是 impl 的內容,水了一大段。


接下來教個 mod 吧
mod 主要是用在分檔案的時候,因為筆者真的很討厭 Code 亂亂的,所以經常區分出很多的檔案,那這邊就先講一下最簡單的,

第一點的話可以看到一個很簡單的函數,這個是我們等等要傳入 Main 裡面的。
第二點則是說這個東西是保存在跟 main 一樣的資料夾下的。
那麼就直接在第一行輸入 mod a;
也就是引用這個檔案。
如果想呼叫函數呢,就直接 a::a(); "::" 我記得是檔案導向的意思。
所以可以這樣用 owob
並且要注意的是,"想要呼叫的函數必須要是 public 狀態的" Rust 全部都是使用
private 的函數,意味著必須得要改為 pub 才能讓非此檔案的 functions 讀取你所到的資料
那如果說,要有資料夾區隔呢,就直接在該資料夾創立一個新的 mod.rs 檔案,那他會將此資料夾的東西都審核,也就是所有東西會先經過他處理引用才會回到 main,在我的 Github 上的 it幫 那個資料,就有使用此技巧的範例。


好了 今天就講到這裡,被我水了一篇,主要是我好想睡zzzzz 又怕一睡就過日了
明天再見,掰掰,先睡w


上一篇
[Day7] struct 結構體
下一篇
[Day9] Review and Supplement by use Leetcode problem
系列文
Rust的多方面運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言