初识结构体
此篇假定读者已了解并使用过结构体。
使用struct
声明并定义结构体
Rust结构体、枚举命名规范为:单词首字母大写,各单词间无空格。
1 | struct Info { |
struct
同fn
一样,能在全局和任意代码块使用,同样的,struct
也有作用域。
结构体使用方法:
1 | let info = Info { |
好了,接下来让我们尝试访问info
的字段(field
)id
:
1 | println!("id={}", info.id); |
cargo run
,就可以看到输出:id=0
。
赋值简化
结构体的赋值往往比较冗长,因此Rust支持将赋值进行一定的简化。
赋值的字段名与实例名相同时,允许只写字段名:
1
2
3
4
5
6let id = 0;
let info = Info {
id,
x: 0.,
y: 0.,
}利用同类型实例的字段给实例赋值时,可使用更新语法简化赋值:
1
2
3
4
5
6
7
8
9
10let info1 = Info {
id: 0,
x: 0.,
y: 0.,
}
let info2 = Info {
x: 0.,
..info1
}info2
除了id
是指定赋值为1
,其他的字段都使用info1
同字段的值赋值。
元组结构体
使用普通结构体有时也会比较麻烦,毕竟每个字段都要命名,赋值也比较麻烦,折中的办法是使用元组结构体:
1 | struct coordinate(f64, f64); |
元组结构体的使用方法和元组差不多,使用.x
访问第x
个(从0开始)字段,赋值方式和元组也差不多:
1 | let coor = coordinate(0., 0.); |
但是注意一点,即使字段类型相同,各类型之间也不能互相赋值(除非强转)。
除了上述结构体外,还有一类特殊的结构体——零大小结构体,这类结构体没有任何的字段值。
至于作用:// TODO