在 Rust 结构中初始化变量

Nilesh Katuwal 2023年1月30日 2022年5月18日
  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 }