Defining and Instantiating Structs
格式
1 2 3 4
| struct Data_name { data1: type1, data2: type2, }
|
1 2 3 4 5 6
| struct Data { name: String, age: u32, gender: bool, balance: f32, }
|
初始化一个 struct 对象
1 2 3 4 5 6
| let user = Data { name: String::from("SCUT"), age: 1900, gender: true, balance: 0.0, };
|
访问对象中的元素
1
| println!("{} {} {} {}", user.name, user.age, user.gender, user.balance);
|
..
语句
1 2 3 4 5
| let user1 = Data { name: String:: from("SCUT"), gender: false, ..user };
|
这样创建出来的 user1 ,未指出的变量会复制 user 中的,注意会有 move 语句,所有权可能会变化
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let user1 = Data { name: String:: from("SCUT"), gender: false, ..user }; println!("{} {} {} {}", user1.name, user1.age, user1.gender, user1.balance);
let user2 = Data { ..user };
println!("{} {} {} {}", user2.name, user2.age, user2.gender, user2.balance);
|
tuple struct
格式
1
| struct Data_name(type1, type2,...);
|
创建对象
1 2 3
| struct Point(f32, f32); let p = Point(0.0, 0.0);
|
访问元素
1
| println!("{} {}", p.0, p.1);
|
An Example Program Using Structs
debug
在类前面加 #[derive(Debug)]
1 2 3 4 5 6 7
| #[derive(Debug)] struct Data { name: String, age: u32, gender: bool, balance: f32, }
|
输出 类
{:?}
语法
1 2 3
| println!("{:?}", user);
|
{:#?}
语法
1 2 3 4 5 6 7 8 9 10
| println!("{:#?}", user);
|
格式不同
作为参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| struct Rectangle { width: f64, height: f64, }
fn area(rect: &Rectangle) -> f64 { rect.width * rect.height }
let rect = Rectangle { width: 3.1, height: 4.1, }; println!("{}", area(&rect));
|
Method Syntax
实现类中的函数
impl
语句 implementations
格式
1 2 3 4 5 6 7 8 9
| impl srtuct_name { fn func1(&self, ...) { } fn func2(...) { } }
|
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #[derive(Debug)] struct Rectangle { width: f64, height: f64, }
impl Rectangle { fn area(&self) -> f64 { self.width * self.height }
fn hold(&self, rect: &Rectangle) -> bool { self.width >= rect.width && self.height >= rect.height }
fn square(size: f64) -> Rectangle { Rectangle { width: size, height: size, } } }
let r1 = Rectangle { width: 10.0, height: 20.0, };
let r2 = Rectangle { width: 11.0, height: 21.0, };
println!("{} {}", r1.hold(&r2), r2.hold(&r1));
let sq = Rectangle::square(10.0); println!("{:#?}", sq);
|
以上就是 $Rust$ 的 $struct$
参考 The Rust Programming Language
更多内容参考我的 Blog