You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.7 KiB

struct

类似于java中的类。关键字为struct。

image-20230105114220159

这个user1没设置mut, 故实例不可以改。

image-20230105114604701

注意,整个实例必须是可变的;Rust 不允许我们仅将某些字段标记为可变的。如果你在创建结构体的时候使用了 mut,那么整个结构体都是可变的,所有的字段都可以被修改。

根据特定自动返回user

类似自己写了个构造函数。 image-20230105141004996

Using the Field Init Shorthand

将函数参数命名为与结构字段同名是有意义的,但必须重复字段名称emailusername变量有点乏味。因为参数名和结构字段名在清单,故可以使用field init 速记语法重写 build_user,使其行为完全相同但没有重复的email和username。

顺序可以打乱。在这里,我们正在创建User结构的一个新实例,它有一个名为email. 我们想将email字段的值 设置为函数email参数中的build_user值。因为email字段和email参数同名,所以我们只需要写email而不是email: email

image-20230105142354224

使用其他实例创建新的值

image-20230105151237732

更简单的写法如下。..指定未显式设置的其余字段应与给定实例中的字段具有相同的值。

image-20230105151914177

tuple structs

元组结构没有字段关联的名称,它们只有字段的类型。而相较于元组,在管理相同类型的数据时,有更加直观。当你想要给整个元组一个名字并将元组与其他元组区分开来时可以使用此结构。

例如,你可能会使用元组结构来表示颜色,并希望为每种颜色分配一个名字。你可以定义一个元组结构 Color,其中存储了三个 i32 类型的值,分别表示红,绿和蓝色分量。可以此来定义其他颜色。

image-20230105154919875

注意 black 和 origin 值是不同类型,因为它们是不同元组结构体的实例。每个您定义的结构体都是自己的类型,即使结构体内的字段可能具有相同的类型。例如,接受类型 Color 的参数的函数不能作为 Point 类型的参数

没有任何字段的类单元(unit-like )结构

没有任何字段的结构被称为类单元结构,因为它们的行为类似于我们在“元组类型”部分()中提到的单元类型。当需要在某种类型上实现特征但没有要存储在类型本身中的任何数据时,类似单元的结构会很有用。

要定义AlwaysEqual,我们使用struct关键字、我们想要的名称,然后是分号。不需要大括号或圆括号!AlwaysEqual然后我们可以用类似的方式在变量中获取一个实例subject:使用我们定义的名称,不带任何大括号或圆括号。

image-20230105161458114

结构体的所有权

image-20230105162555140