在 Rust 結構中初始化變數
Nilesh Katuwal
2023年1月30日
2022年5月18日
struct
是使用者定義的資料型別,包含定義特定例項的欄位。struct
有助於更容易理解地實現抽象概念。
在 Rust 中使用 struct
宣告和初始化結構
struct Employee {
id: i32,
name: String,
address: String,
designation: String,
}
每個欄位的型別都寫在其名稱的前面(例如,id
是 i32
型別,name
是 string
,address
也是 string
,等等)。宣告 struct
時,應將值分配給稱為初始化的每個欄位。
struct Student {
name:String,
gpa:i32,
faculty:String,
}
fn main() {
let std1 = Student {
faculty:String::from("Computer Science"),
name:String::from("Nil"),
gpa:3
};
println!("Name is :{}, Faculty is :{}, GPA is :{}",std1.name,std1.faculty,std1.gpa);
}
我們建立了一個名為 Student
的 struct
,其中包含三個欄位 name
、gpa
和 faculty
。欄位的資料型別分別為 String
、i32
和 String
。
該結構由 main()
初始化。它利用 println!
巨集來列印結構欄位的值。
輸出:
Name is :Nil, Faculty is :Computer Science, GPA is :3
在 Rust 中實現 Default
特徵
實現 Default
特徵可以為 struct
提供預設值。我們可以通過對資料結構進行適度調整來使用自動生成的預設實現。
當在資料結構中使用 #[derive(Default)]
時,編譯器會構造一個預設資料結構,每個欄位都具有預設值。預設布林值是 false
,而預設整數值是 0
作為布林值。
#[derive(Default)]
struct Student {
name:String,
gpa:i32,
faculty:String,
}
fn main() {
let std1 = Student {
faculty: String::from("Computer Science"),
name:String::from("Nil"),
..Default::default()
};
println!("Name is :{}, Faculty is :{}, GPA is :{}",std1.name,std1.faculty,std1.gpa);
}
我們使用了 gpa
的預設值。它將有一個預設的整數值,即 0
。
輸出:
Name is :Nil, Faculty is :Computer Science, GPA is :0
在 Rust 中使用 derivative
Crate
derivative
crate 向 Rust 新增了一組 #[derive]
屬性,可以自定義。它使用屬性來生成比內建 derive(Trait)
更多的實現。
use derivative::Derivative;
#[derive(Derivative)]
#[derivative(Debug, Default)]
struct Student {
#[derivative(Default(value = "-1"))]
gpa:i32,
}
fn main() {
println!("Student: {:?}", Student::default());
}
我們將 gpa
的預設值設定為 -1
。我們將執行上面的程式碼而不將任何值傳遞給 gpa
。
輸出:
Student: Student { gpa: -1 }