学习Rust 之 Struct

78 阅读1分钟

简介

Rust里的struct,就像一些语言的class。它是一种自定义类型,可以把几个相关的值(在Rust里可以是0个值)组合起来,还可以定义方法。

struct的可变性和所有权规则

一个可变型的struct变量,它的全部字段都可变的。不能把某些字段标记为不可变。

在从一个struact创建另一个struct时,如果要利用旧的struct里大部分字段时,可以使用struct update syntax。注意,使用struct update syntax时,如果构建新的struct时需要旧的struct的没有实现copy的字段,那这些字段会move到新的struct。然后,旧struct就失效了。这种做法可以让struct里的字段,遵守所有权规则的前2条。

tuple structs

这种语法让你在使用struct时,就像使用tuple一样。

没有任何字段的struct

这种struct也挺有用。它没有字段,占用内存为0,但它可以在业务逻辑中表示某种类型,也能定义关联函数(就像一些语言里的静态方法)。

方法

Rust的方法一般指的是实例方法。 若第一个参数可以是self,那它就是实例方法。 注意self传参有几种形式

  1. &self 传入这个实例的不可变引用,方法内不能修改实例。
  2. &mut self,传入这个实例的可变引用
  3. self 直接传入这个实例,会获得实例的所有权。

impl块里声明的函数的第一个参数如果不是self,那这就是个关联函数(Associated Functions),类似于其它语言中的静态方法。它只能以SomeStruct::some_method的形式调用。