1
codehz 2021-06-29 15:06:27 +08:00
Output 是 associted type,而不是泛型本身的参数
换句话说,Add 只要确定了第一个 T 就能唯一确定实现了,这里的 Output = T 写法实际上是简写,完整展开可以写成这样 impl <T> Add for Complex<T> where T: Add<T>, <T as Add<T>>::Output: T, 也就是说后面的 Output 实际上是针对 T as Add<T> 的额外约束,以确保不会意外匹配到 Output 不是 T 的类型 参考: https://doc.rust-lang.org/rust-by-example/generics/assoc_items/types.html https://stackoverflow.com/questions/32059370/when-is-it-appropriate-to-use-an-associated-type-versus-a-generic-type https://blog.thomasheartman.com/posts/on-generics-and-associated-types |
2
hahaFck OP @codehz 多谢大神指点,我在看看资料,另外还有一个问题,就是 add 方法 fn add(self, rhs: Complex<T>) -> Self::Output
第一个参数是 self,而不是&self,那是不是调用了比如 a + b 后,是不是 a 就失去了所有权,但代码测试还是能访问 a 和 b 的。 |