diff --git a/src/ch05-03-method-syntax.md b/src/ch05-03-method-syntax.md index be5203b..8386465 100644 --- a/src/ch05-03-method-syntax.md +++ b/src/ch05-03-method-syntax.md @@ -2,7 +2,7 @@ > [ch05-03-method-syntax.md](https://github.com/rust-lang/book/blob/main/src/ch05-03-method-syntax.md) >
-> 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` 而不必指定两次同样的值: 文件名: src/main.rs @@ -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` 块