结构体
结构体
struct,或者 structure,是一个自定义数据类型,允许你命名和包装多个相关的值,从而形成一个有意义的组合。如果你熟悉一门面向对象语言,struct 就像对象中的数据属性。结构体让你可以创建出在你的领域中有意义的自定义类型。通过结构体,我们可以将相关联的数据片段联系起来并命名它们,这样可以使得代码更加清晰。方法允许为结构体实例指定行为,而关联函数将特定功能置于结构体的命名空间中并且无需一个实例。
结构体分类
有三种类型的结构。一个是单元结构(Unit Struct)。单位的意思是“什么都没有”。
struct FileDirectory;
fn main() { }
下一个是元组结构(Tuple Struct)或未命名的结构。之所以称为“未命名”,是因为您只需要编写类型,而不是变量名。当您需要简单的结构并且不需要记住名称时,元组结构会很好。
struct Colour(u8, u8, u8);
fn main() {
let my_colour = Colour(50, 0, 50); // Make a colour out of RGB (red, green, blue)
println!("The second part of the colour is: {}", my_colour.1);
}
第三种类型是命名结构(Named Struct)。这可能是最常见的结构。在此结构中,您可以在 {} 代码块内声明变量名称和类型。
struct Colour(u8, u8, u8); // Declare the same Colour tuple struct
struct SizeAndColour {
size: u32,
colour: Colour, // And we put it in our new named struct
}
fn main() {
let my_colour = Colour(50, 0, 50);
let size_and_colour = SizeAndColour {
size: 150,
colour: my_colour
};
}
在命名结构中,用逗号分隔变量。对于最后一个变量,您可以添加或不添加逗号。SizeAndColour 在 colour 后有一个逗号:
struct Colour(u8, u8, u8); // Declare the same Colour tuple struct
struct SizeAndColour {
size: u32,
colour: Colour, // And we put it in our new named struct
}
fn main() { }
但您不需要它。但是最好始终使用逗号,因为有时您会更改变量的顺序。