在 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 }