Update ch13-01-closures.md

Calling the closures is required for add_one_v3 and add_one_v4 to be able to compile because the types will be inferred from their usage.
pull/615/head
shower 2 years ago committed by GitHub
parent 0153632213
commit c467aaed5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -136,7 +136,7 @@ let add_one_v3 = |x| { x + 1 };
let add_one_v4 = |x| x + 1 ; let add_one_v4 = |x| x + 1 ;
``` ```
第一行展示了一个函数定义,而第二行展示了一个完整标注的闭包定义。第三行闭包定义中省略了类型注解,而第四行去掉了可选的大括号,因为闭包体只有一行。这些都是有效的闭包定义,并在调用时产生相同的行为。调用闭包要求 `add_one_v3``add_one_v4` 必须更够编译因为会根据其用途推断其类型 第一行展示了一个函数定义,而第二行展示了一个完整标注的闭包定义。第三行闭包定义中省略了类型注解,而第四行去掉了可选的大括号,因为闭包体只有一行。这些都是有效的闭包定义,并在调用时产生相同的行为。调用闭包`add_one_v3``add_one_v4` 能够编译的必要条件,因为类型将从其用法中推断出来
闭包定义会为每个参数和返回值推断一个具体类型。例如,示例 13-8 中展示了仅仅将参数作为返回值的简短的闭包定义。除了作为示例的目的这个闭包并不是很实用。注意其定义并没有增加任何类型注解:如果尝试调用闭包两次,第一次使用 `String` 类型作为参数而第二次使用 `u32`,则会得到一个错误: 闭包定义会为每个参数和返回值推断一个具体类型。例如,示例 13-8 中展示了仅仅将参数作为返回值的简短的闭包定义。除了作为示例的目的这个闭包并不是很实用。注意其定义并没有增加任何类型注解:如果尝试调用闭包两次,第一次使用 `String` 类型作为参数而第二次使用 `u32`,则会得到一个错误:

Loading…
Cancel
Save