专门查大学的网站,女同性怎么做的视频网站,中国住房和城乡建设厅官网,室内设计案例分享格式及语法
在其他很多编程语言中#xff0c;有类(Class)的存在#xff0c;在Rust中#xff0c;我们没有类(Class)的概念#xff0c;我们使用结构体(Struct)。 与一个结构体相关的有以下几个部分#xff1a;
数据字段方法关联函数
声明一个结构体及其字段的格式如下有类(Class)的存在在Rust中我们没有类(Class)的概念我们使用结构体(Struct)。 与一个结构体相关的有以下几个部分
数据字段方法关联函数
声明一个结构体及其字段的格式如下
pub struct RedFox {enemy: bool,life: u8,
}以struct关键词开头后面紧跟结构体的名称(以大写字母开头的驼峰式命名)大括号中是结构体的数据字段每个字段由字段名称及它的类型声明组成 字段间用,分隔。
最后一个字段后面也可以加上,, 并且我们推荐大家这样做以防在以后添加新字段时忘记在前面的字段后添加,。
正如我们在前面的章节中提到的 Rust中的函数默认都是私有的结构体也是一样 如果想在别的模块中使用结构体需要加上pub标识
pub struct RedFox {enemy: bool,life: u8,
}结构体的字段默认也是私有的默认只能在结构体被定义的模块内被访问 如果想在结构体被定义的模块之外访问结构体的字段则需要将该字段也标识成pub:
pub struct RedFox {pub enemy: bool,life: u8,
}结构体的数据字段本身也可以是一个结构体:
pub struct RedFox {enemy: bool,life: u8,profile: Profile,
}struct Profile {name: String,age: u8,
}结构体关联函数与方法
实例化一个结构体时我们需要为这个结构体的每个字段都指定一个值。 一般来说我们会为结构体实现一个关联函数作为结构体的构造函数来创建一个具有默认值的结构体实例
struct RedFox {enemy: bool,life: u8,
}impl RedFox {fn new() - Self {Self {enemy: true,life: 70,}}
}结构体的方法和关联函数在一个叫impl的代码块中实现与结构体的定义是不同的代码块。这个代码块以impl开头 后面紧跟结构体的名称 然后在其后的大括号中 实现结构体的方法和关联函数。
上述代码中的fn new() - Self被称为结构体的关联函数因为它没有使用self或self作为其第一个参数。 这样的函数在一些其他语言(如Python)中被称为类方法可以直接通过类名而不是类的实例调用。
在Rust中 new函数是我们约定俗成的一个关联函数用于创建一个具有默认值的结构体实例。在结构体的方法或关联函数中 首字母大写的Self等价于结构体的名称本身 因此上面的关联函数也可以这样写
impl RedFox {fn new() - RedFox {RedFox {enemy: true,life: 70,}}
}但我们更推荐使用Self。
结构体方法也是在impl代码块中进行实现的 与关联函数不同的是结构体方法总是以self或self或mut self作为第一个参数。
impl RedFox {// 关联函数fn function() ...// 方法fn move(self) ...fn borrow(self) ...fn mut_borrow(mut self) ...
}关联函数可以直接通过结构体名称调用 而方法只能通过结构体的示例调用。
实例化结构体
let fox RedFox::new();上面的代码会创建一个具有默认值的RedFox结构体。注意Rust中的作用域操作符是::, 我们使用它来访问类似命名空间中的部分内容。例如在前面的章节中 我们在use语句中也使用了::来访问模块中的函数。在这个例子中我们则是使用::来访问一个结构体的关联函数。
一旦我们有了一个实例我们就能像在大多数语言一样通过这个实例使用.操作符来获取或设置特定字段的值或者调用方法。
let fox RedFox::new();
let life_left fox.life;
fox.enemy false;
fox.some_method();小结
本章我们介绍了Rust中的结构体的定义及其关联函数与方法的使用下一章将介绍Rust中另一个非常重要的概念 Trait。