参考The Book的例子,有一个疑问,impl Summary
作为返回值是否是一种语法糖?
我试着这样写:
pub fn test_return<T: Summary>() -> T { Tweet { username: String::from("Jim"), content: String::from("learning trait"), reply: false, retweet: true, } }
但是,编译通不过:expected type parameter T
, found struct Tweet
。所以上述的写法和直接返回impl Summary
的区别到底是什么?
1 sosilver 2021-05-07 18:19:46 +08:00 via Android 泛型参数是由 caller 决定的,所以函数里没法返回 concrete type ( Tweet 不是 T )。返回位的 impl Trait 类型,由函数实现决定,只是不写出来(可能写不出来)。 |
![]() | 2 h404bi 2021-05-07 18:35:40 +08:00 写成 pub fn test_return<T: Summary>() -> T;,caller 就能假定可以 test_return::<NonTweet>() -> NonTweet (假设 NonTweet 实现了 Summary )这样调用了,但实际上函数内只返回 Tweet 了,不是 generic 。 返回位这里的 impl Trait 实际上是一个 Existential type,跟写成 T 的 Generic type 不同。 |
3 abscon 2021-05-11 07:38:13 +08:00 via iPhone 参数里的 impl Trait 是语法糖,但返回值里的 impl Trait 不是语法糖 |