在此代码中使用Self::Output
优于Int256
作为返回类型是否有任何优势?
impl Add for Int256 {
type Output = Int256;
fn add(self, v: Int256) -> Self::Output {
// ...
}
}
impl Add for Int256 {
type Output = Int256;
fn add(self, v: Int256) -> Int256 {
// ...
}
}
答案 0 :(得分:1)
从编译器的角度来看,两个签名之间没有区别,因此决定哪个更适合人类阅读和理解代码。
我通常更喜欢使用关联类型而不是具体类型。
这出现在Iterator
特征的实现中。假设我们有一个暴露迭代器而不是布尔值的类型。
impl Iterator for MyBits {
type Item = bool;
fn next(&mut self) -> ??? {
/* ... */
}
}
对于???
,我们可以放置Option<Self::Item>
或Option<bool>
。快速浏览此代码的人将更容易阅读Option<Self::Item>
,因为它更好地捕获了返回类型的含义 - 迭代中的下一个项目(如果有的话)。如果我们写Option<bool>
那么意义不那么明显 - 也许bool以某种方式表明是否还有剩余的项目......?