結構
結構(struct)是 Rust 提供的一種可以讓開發者建立資料型別相對複雜的一種方式,類似 JavaScript 的物件和 Python 的類別。
結構和元組類似,都是可以由不同不同型態組成,不過與元組不同地方在於必須要為每個組件命名,所以可以不必按照順序,就可以讀取或修改結構的個別資料。
Rust 提供了三種結構,分別是:
- 具名欄位(named-field):最常用的用法,每個組件都有一個名稱。
- 類元組(tuple-like):因為類似元組,所以也必須要按照順序使用。
- 類單元(unit-like):比較不常見,其結構完全沒有組件。
具名欄位
直接看範例如何建立一個具名欄位的結構:
1 | struct Hunter { |
首先起手式先用關鍵字 struct
為整個結構命名,命名的方式為駝峰命名(Camel Case),然後在大括號中加入欄位,欄位的名稱則是使用蛇式命名(snake_case),接著就幫每個欄位定義型別。
定義完之後如果要使用剛剛建立的結構,可以建立一個變數並且指定為結構,就像剛剛建立的寫法差不多,但差別在我們可以給予每個欄位相對應型別的值,就像下面的寫法這樣:
1 | let killua = Hunter { |
取得結構中的值
如果要取得結構中某個值的話,假設要印出 name 和 * hunter_license* 的話,就像這樣:
1 | println!("{}是{}獵人", killua.name, killua.nen_type); |
如果要改變值的話,例如我們要幫奇犽加一歲。要注意的是 Rust 沒辦法讓開發者只標記特定欄位為可變,一定要整個變數。所以我們就先在變數前加上 mut
,然後一樣直接先取出 age 這個值,接著就可以改變數值,就像這樣:
1 | let mut killua = Hunter { |
類元組
Rust 也有像是元組的結構,就像這樣建立:
1 | struct Score(i32, i32); |
建立類元組的變數和值也很像建立元組,不過差別在要加入結構名稱:
1 | let my_score = Score(59, 70); |
要使用的話,也跟使用元組的方式一樣:
1 | struct Score(i32, i32); |
類單元
第三種比較特別,因為在宣告結構型態的時候完全沒有欄位,就像這樣就建立完成了:
1 | struct OneUnit |
由於這種型態比較不常使用,這邊就先不介紹了。
結構的方法
在 Rust 中,結構也可以定義方法,就像這樣:
1 | struct Hunter { |
在上面的程式碼中,我們先定義了一個結構,然後在結構後面加上 impl
,接著就可以定義方法了,方法的名稱就是 get_name
,然後在方法的括號中加上 &self
,這個 &self
就是指向結構的指標,接著就是回傳值,這邊回傳的是 &String
,也就是指向字串的指標。
接著就可以在主程式中使用這個方法了。
Rust 的結構就介紹到這邊了,明天來介紹 Rust 的泛型。