30 天拿下 Rust 之结构体
概述
在 Rust 语言中,结构体是一种用户自定义的数据类型,它允许你将多个相关的值组合成一个单一的类型。结构体是一种复合数据类型,可以用来封装多个不同类型的字段,这些字段可以是基本数据类型、其他结构体、枚举类型等。通过使用结构体,你可以创建更复杂的数据结构,并定义它们的行为。
结构体的定义
在 Rust 中,可以使用 struct 关键字来定义结构体。结构体的基本形式如下。
注意:与 C/C++不同,Rust 里的 struct 语句仅用来定义,不能声明实例;struct 的结尾不需要分号,且每个字段定义之后用逗号进行分隔。
在下面的示例代码中,我们定义了一个结构体 Person。它有两个字段,一个字段为 name,字符串类型,另一个字段为 age,32 位整型。
结构体的使用
要使用结构体,我们需要先创建结构体的实例(即对象)。创建方法为:使用结构体名称并跟上大括号{},在大括号中指定每个字段的值。具体可参考下面的示例代码。
如果我们想要赋值的变量名称与结构体中的字段名称完全相同,则可以省略字段名称。否则,编译时会提示错误信息:unknown field。
创建好结构体的实例后,我们可以通过点号.来访问结构体字段。
结构体的字段可以是可变的,也可以是不可变的。默认情况下,结构体的字段不可变。如果需要修改结构体的字段,需要使用 mut 关键字让其成为可变。
结构体绑定方法
在 Rust 中,结构体可以绑定方法。这些方法与结构体紧密关联,允许你以面向对象的方式操作结构体的实例。方法定义在 impl 块中,该块指定了方法所属的类型。我们结合下面的示例代码,来进一步说明结构体如何绑定方法,以及如何使用这些方法。
在上面的示例代码中,我们为 Rectangle 结构体定义了三个方法。
new:这是一个静态方法,用于创建并返回一个新的 Rectangle 实例,对应 C++、Java 等面向对象编程语言中的构造函数。它使用了 Self 关键字来指代结构体自身,这是一种在 Rust 中引用当前实现类型的方式。
area:这个方法是一个实例方法,用于计算并返回矩形的面积。它接受一个指向 Rectangle 实例的不可变引用 &self 作为参数,这样它就可以访问实例的字段了。
print_basic_info:这个方法也是一个静态方法,用于打印矩形的基本信息。
在 main 函数中,我们通过构造函数创建了一个 Rectangle 的实例,并调用了它的 area 方法来计算面积。注意:方法的第一个参数通常是一个指向结构体实例的引用(&self、&mut self),这允许方法访问和修改结构体实例的字段。在这个例子中,我们使用的是不可变引用 &self,因为我们只读取字段的值而不修改它们。如果我们需要修改字段,我们会使用可变引用 &mut self。
总结一下:绑定到结构体的方法提供了一种面向对象的方式来操作数据,即使 Rust 是一种基于函数的编程语言,而不是传统的面向对象语言。
结构体更新语法
在 Rust 中,如果你想从一个现有的结构体实例创建另一个新的实例,并在此过程中更新某些字段的值,你可以使用结构体的更新语法。这种语法使用..运算符(也称为点运算符或展开运算符),允许你复制一个现有的结构体实例,并仅更改你需要修改的字段。
在上面的示例代码中,person1 是一个 Person 类型的实例。我们想要创建一个新的 Person 实例 person2,它的 age 和 city 字段与 person1 相同,但 name 字段需要更新为"Mike"。通过使用..运算符,我们就不需要手动复制 age 和 city 字段的值,而只需要指定要更新的 name 字段。
版权声明: 本文为 InfoQ 作者【希望睿智】的原创文章。
原文链接:【http://xie.infoq.cn/article/163c740efb7daa4fcfeaceb77】。文章转载请联系作者。
评论