3.7 KiB
struct
类似于java中的类。关键字为struct。
这个user1没设置mut, 故实例不可以改。
注意,整个实例必须是可变的;Rust 不允许我们仅将某些字段标记为可变的。如果你在创建结构体的时候使用了 mut,那么整个结构体都是可变的,所有的字段都可以被修改。
根据特定自动返回user
Using the Field Init Shorthand
将函数参数命名为与结构字段同名是有意义的,但必须重复字段名称email
和username
变量有点乏味。因为参数名和结构字段名在清单,故可以使用field init 速记语法重写 build_user,使其行为完全相同但没有重复的email和username。
顺序可以打乱。在这里,我们正在创建User
结构的一个新实例,它有一个名为email
. 我们想将email
字段的值 设置为函数email
参数中的build_user
值。因为email
字段和email
参数同名,所以我们只需要写email
而不是email: email
。
使用其他实例创建新的值
更简单的写法如下。..
指定未显式设置的其余字段应与给定实例中的字段具有相同的值。
tuple structs
元组结构没有字段关联的名称,它们只有字段的类型。而相较于元组,在管理相同类型的数据时,有更加直观。当你想要给整个元组一个名字并将元组与其他元组区分开来时可以使用此结构。
例如,你可能会使用元组结构来表示颜色,并希望为每种颜色分配一个名字。你可以定义一个元组结构 Color,其中存储了三个 i32 类型的值,分别表示红,绿和蓝色分量。可以此来定义其他颜色。
注意 black 和 origin 值是不同类型,因为它们是不同元组结构体的实例。每个您定义的结构体都是自己的类型,即使结构体内的字段可能具有相同的类型。例如,接受类型 Color 的参数的函数不能作为 Point 类型的参数
没有任何字段的类单元(unit-like )结构
没有任何字段的结构被称为类单元结构,因为它们的行为类似于我们在“元组类型”部分()中提到的单元类型。当需要在某种类型上实现特征但没有要存储在类型本身中的任何数据时,类似单元的结构会很有用。
要定义AlwaysEqual
,我们使用struct
关键字、我们想要的名称,然后是分号。不需要大括号或圆括号!AlwaysEqual
然后我们可以用类似的方式在变量中获取一个实例subject
:使用我们定义的名称,不带任何大括号或圆括号。