|
|
@ -268,7 +268,7 @@ fn returns_summarizable() -> impl Summary {
|
|
|
|
|
|
|
|
|
|
|
|
因为 `Weibo` 实现了 `Summary`,因此这里可以用它来作为返回值。要注意的是,虽然我们知道这里是一个 `Weibo` 类型,但是对于 `returns_summarizable` 的调用者而言,他只知道返回了一个实现了 `Summary` 特征的对象,但是并不知道返回了一个 `Weibo` 类型。
|
|
|
|
因为 `Weibo` 实现了 `Summary`,因此这里可以用它来作为返回值。要注意的是,虽然我们知道这里是一个 `Weibo` 类型,但是对于 `returns_summarizable` 的调用者而言,他只知道返回了一个实现了 `Summary` 特征的对象,但是并不知道返回了一个 `Weibo` 类型。
|
|
|
|
|
|
|
|
|
|
|
|
这种 `impl Trait` 形式的返回值,在一种场景下非常非常有用,那就是返回的真实类型非常复杂,你不知道该怎么声明时(毕竟 Rust 要求你必须标出所有的类型),此时就可以用 `impl Trait` 的方式简单返回。例如,闭包和迭代器就是很复杂,只有编译器才知道那玩意的真实类型,如果让你写出来它们的具体类型,我估计想杀人的心都有,好在你可以用 `impl Iterator` 来告诉调用者,返回了一个迭代器,因为所有迭代器都会实现 `Iterator` 特征。
|
|
|
|
这种 `impl Trait` 形式的返回值,在一种场景下非常非常有用,那就是返回的真实类型非常复杂,你不知道该怎么声明时(毕竟 Rust 要求你必须标出所有的类型),此时就可以用 `impl Trait` 的方式简单返回。例如,闭包和迭代器就是很复杂,只有编译器才知道那玩意的真实类型,如果让你写出来它们的具体类型,估计内心有一万只草泥马奔腾,好在你可以用 `impl Iterator` 来告诉调用者,返回了一个迭代器,因为所有迭代器都会实现 `Iterator` 特征。
|
|
|
|
|
|
|
|
|
|
|
|
但是这种返回值方式有一个很大的限制:只能有一个具体的类型,例如:
|
|
|
|
但是这种返回值方式有一个很大的限制:只能有一个具体的类型,例如:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|