|
|
|
@ -192,7 +192,7 @@ Rust 闭包在形式上借鉴了 `Smalltalk` 和 `Ruby` 语言,与函数最大
|
|
|
|
|
|
|
|
|
|
Rust 是静态语言,因此所有的变量都具有类型,但是得益于编译器的强大类型推导能力,在很多时候我们并不需要显式地去声明类型,但是显然函数并不在此列,必须手动为函数的所有参数和返回值指定类型,原因在于函数往往会作为 API 提供给你的用户,因此你的用户必须在使用时知道传入参数的类型和返回值类型。
|
|
|
|
|
|
|
|
|
|
与函数相反,闭包并不会作为 API 对外提供,因此它可以享受编译器的类型推导能力,无需标注参数和返回值的类型。
|
|
|
|
|
与函数相反,闭包通常不会作为 API 对外提供,因此它可以享受编译器的类型推导能力,无需标注参数和返回值的类型。
|
|
|
|
|
|
|
|
|
|
为了增加代码可读性,有时候我们会显式地给类型进行标注,出于同样的目的,也可以给闭包标注类型:
|
|
|
|
|
|
|
|
|
@ -220,7 +220,7 @@ let add_one_v3 = |x| { x + 1 };
|
|
|
|
|
let add_one_v4 = |x| x + 1 ;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
可以看出第一行的函数和后面的闭包其实在形式上是非常接近的,同时三种不同的闭包也展示了三种不同的使用方式:省略参数、返回值和花括号对。
|
|
|
|
|
可以看出第一行的函数和后面的闭包其实在形式上是非常接近的,同时三种不同的闭包也展示了三种不同的使用方式:省略参数类型、返回值和花括号对。
|
|
|
|
|
|
|
|
|
|
虽然类型推导很好用,但是它不是泛型,**当编译器推导出一种类型后,它就会一直使用该类型**:
|
|
|
|
|
|
|
|
|
|