mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 08:51:18 +08:00
Update ch13-01-closures.md
This commit is contained in:
parent
3ada8d427e
commit
fa62c9d6b0
@ -61,7 +61,7 @@ let add_one_v4 = |x| x + 1 ;
|
||||
|
||||
第一行展示了一个函数定义,第二行展示了一个完整标注的闭包定义。第三行闭包定义中省略了类型注解,而第四行去掉了可选的大括号,因为闭包体只有一个表达式。这些都是有效的闭包定义,并在调用时产生相同的行为。调用闭包是 `add_one_v3` 和 `add_one_v4` 能够编译的必要条件,因为类型将从其用法中推断出来。这类似于 `let v = Vec::new();`,Rust 需要类型注解或是某种类型的值被插入到 `Vec` 才能推断其类型。
|
||||
|
||||
对于闭包的定义,编译器会为每个参数和返回值推断一个具体类型。例如,示例 13-3 中展示了仅仅将参数作为返回值的简短的闭包定义。除了作为示例的目的这个闭包并不是很实用。注意其定义并没有增加任何类型注解:如果尝试调用闭包两次,第一次使用 `String` 类型作为参数而第二次使用 `u32`,则会得到一个错误:
|
||||
编译器会为闭包定义中的每个参数和返回值推断一个具体类型。例如,示例 13-3 中展示了仅仅将参数作为返回值的简短的闭包定义。除了作为示例的目的这个闭包并不是很实用。注意这个定义没有增加任何类型注解,所以我们可以用任意类型来调用这个闭包。但是如果尝试调用闭包两次,第一次使用 `String` 类型作为参数而第二次使用 `u32`,则会得到一个错误:
|
||||
|
||||
<span class="filename">文件名:src/main.rs</span>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user