Merge pull request #802 from AllanDowney/patch1

update(method): fix format
pull/805/head
Sunface 3 years ago committed by GitHub
commit 9e4f25bb1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -6,7 +6,7 @@
object.method()
```
例如读取一个文件写入缓冲区,如果用函数的写法 `read(f,buffer)`,用方法的写法 `f.read(buffer)`。不过与其它语言 `class` 跟方法的联动使用不同这里可能要修改下Rust 的方法往往跟结构体、枚举、特征一起使用,特征(Trait)将在后面几章进行介绍。
例如读取一个文件写入缓冲区,如果用函数的写法 `read(f, buffer)`,用方法的写法 `f.read(buffer)`。不过与其它语言 `class` 跟方法的联动使用不同这里可能要修改下Rust 的方法往往跟结构体、枚举、特征(Trait)一起使用,特征将在后面几章进行介绍。
## 定义方法
@ -73,6 +73,7 @@ fn main() {
`impl Rectangle {}` 表示为 `Rectangle` 实现方法(`impl` 是实现 _implementation_ 的缩写),这样的写法表明 `impl` 语句块中的一切都是跟 `Rectangle` 相关联的。
#### self、&self 和 &mut self
接下里的内容非常重要,请大家仔细看。在 `area` 的签名中,我们使用 `&self` 替代 `rectangle: &Rectangle``&self` 其实是 `self: &Self` 的简写(注意大小写)。在一个 `impl` 块内,`Self` 指代被实现方法的结构体类型,`self` 指代此类型的实例,换句话说,`self` 指代的是 `Rectangle` 结构体实例,这样的写法会让我们的代码简洁很多,而且非常便于理解:我们为哪个结构体实现方法,那么 `self` 就是指代哪个结构体的实例。
需要注意的是,`self` 依然有所有权的概念:
@ -113,7 +114,7 @@ fn main() {
}
```
当我们使用 `rect1.width()` 时, Rust 知道我们调用的是它的方法,如果使用 `rect1.width`,则是访问它的字段。
当我们使用 `rect1.width()`Rust 知道我们调用的是它的方法,如果使用 `rect1.width`,则是访问它的字段。
一般来说,方法跟字段同名,往往适用于实现 `getter` 访问器,例如:
@ -221,7 +222,7 @@ impl Rectangle {
> Rust 中有一个约定俗称的规则,使用 `new` 来作为构造器的名称出于设计上的考虑Rust 特地没有用 `new` 作为关键字
因为是函数,所以不能用 `.` 的方式来调用,我们需要用`::`来调用,例如 `let sq = Rectangle::new(3,3);`。这个方法位于结构体的命名空间中:`::` 语法用于关联函数和模块创建的命名空间。
因为是函数,所以不能用 `.` 的方式来调用,我们需要用 `::` 来调用,例如 `let sq = Rectangle::new(3, 3);`。这个方法位于结构体的命名空间中:`::` 语法用于关联函数和模块创建的命名空间。
## 多个 impl 定义
@ -276,7 +277,6 @@ m.call();
除了结构体和枚举,我们还能为特征(trait)实现方法,这将在下一章进行讲解,在此之前,先来看看泛型。
## 课后练习
> [Rust By Practice](https://zh.practice.rs/method.html),支持代码在线编辑和运行,并提供详细的[习题解答](https://github.com/sunface/rust-by-practice)。
> [Rust By Practice](https://zh.practice.rs/method.html),支持代码在线编辑和运行,并提供详细的[习题解答](https://github.com/sunface/rust-by-practice)。

Loading…
Cancel
Save