在 Rust 結構中初始化變數

Nilesh Katuwal 2023年1月30日
  1. 在 Rust 中使用 struct 宣告和初始化結構
  2. 在 Rust 中實現 Default 特徵
  3. 在 Rust 中使用 derivative Crate
在 Rust 結構中初始化變數

struct 是使用者定義的資料型別,包含定義特定例項的欄位。struct 有助於更容易理解地實現抽象概念。

在 Rust 中使用 struct 宣告和初始化結構

struct Employee {
    id: i32,
    name: String,
    address: String,
    designation: String,
}

每個欄位的型別都寫在其名稱的前面(例如,idi32 型別,namestringaddress 也是 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);
}

我們建立了一個名為 Studentstruct,其中包含三個欄位 namegpafaculty。欄位的資料型別分別為 Stringi32String

該結構由 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 }