|
|
|
@ -2,7 +2,7 @@
|
|
|
|
|
|
|
|
|
|
> [ch05-03-method-syntax.md](https://github.com/rust-lang/book/blob/main/src/ch05-03-method-syntax.md)
|
|
|
|
|
> <br>
|
|
|
|
|
> commit 8a0bb3c96e71927b80fa2286d7a5a5f2547c6aa4
|
|
|
|
|
> commit dd7e05275822d6cf790bcdae6983b3234141b5e7
|
|
|
|
|
|
|
|
|
|
**方法**(method)与函数类似:它们使用 `fn` 关键字和名称声明,可以拥有参数和返回值,同时包含在某处调用该方法时会执行的代码。不过方法与函数是不同的,因为它们在结构体的上下文中被定义(或者是枚举或 trait 对象的上下文,将分别在第六章和第十七章讲解),并且它们第一个参数总是 `self`,它代表调用该方法的结构体实例。
|
|
|
|
|
|
|
|
|
@ -104,7 +104,7 @@ Can rect1 hold rect3? false
|
|
|
|
|
|
|
|
|
|
所有在 `impl` 块中定义的函数被称为 **关联函数**(*associated functions*),因为它们与 `impl` 后面命名的类型相关。我们可以定义不以 `self` 为第一参数的关联函数(因此不是方法),因为它们并不作用于一个结构体的实例。我们已经使用了一个这样的函数:在 `String` 类型上定义的 `String::from` 函数。
|
|
|
|
|
|
|
|
|
|
不是方法的关联函数经常被用作返回一个结构体新实例的构造函数,例如我们可以提供一个关联函数,它接受一个维度参数并且同时作为宽和高,这样可以更轻松的创建一个正方形 `Rectangle` 而不必指定两次同样的值:
|
|
|
|
|
不是方法的关联函数经常被用作返回一个结构体新实例的构造函数。这些函数的名称通常为 `new` ,但 `new` 并不是一个关键字。例如我们可以提供一个叫做 `square` 关联函数,它接受一个维度参数并且同时作为宽和高,这样可以更轻松的创建一个正方形 `Rectangle` 而不必指定两次同样的值:
|
|
|
|
|
|
|
|
|
|
<span class="filename">文件名: src/main.rs</span>
|
|
|
|
|
|
|
|
|
@ -112,6 +112,8 @@ Can rect1 hold rect3? false
|
|
|
|
|
{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs:here}}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
关键字 `Self` 在函数的返回类型中代指在 `impl` 关键字后出现的类型,在这里是 `Rectangle`
|
|
|
|
|
|
|
|
|
|
使用结构体名和 `::` 语法来调用这个关联函数:比如 `let sq = Rectangle::square(3);`。这个函数位于结构体的命名空间中:`::` 语法用于关联函数和模块创建的命名空间。第七章会讲到模块。
|
|
|
|
|
|
|
|
|
|
### 多个 `impl` 块
|
|
|
|
|