rust 的范型太复杂了。
1.声明了一个范型结构体:
struct Complex<T> {
re: T,
im: T
}
2.为结构体实现+操作符操作,即实现 Add trait
impl<T: Add<T, Output=T>> Add for Complex<T> {
type Output = Complex<T>;
fn add(self, rhs: Complex<T>) -> Self::Output {
Complex { re: self.re + rhs.re, im: self.im + rhs.im }
}
}
3.问题就出现在这个 T: Add<T, Output=T>,系统的 Add 的定义为 pub trait Add<Rhs = Self> {...}
明明范型参数只有一个 Rhs,并且默认值是 Self,为什么那段代码可以写成 Add<T, Output=T>,这里明明有 2 个范型参数呢,一个 T,一个 Output,有点看不明白。
1.声明了一个范型结构体:
struct Complex<T> {
re: T,
im: T
}
2.为结构体实现+操作符操作,即实现 Add trait
impl<T: Add<T, Output=T>> Add for Complex<T> {
type Output = Complex<T>;
fn add(self, rhs: Complex<T>) -> Self::Output {
Complex { re: self.re + rhs.re, im: self.im + rhs.im }
}
}
3.问题就出现在这个 T: Add<T, Output=T>,系统的 Add 的定义为 pub trait Add<Rhs = Self> {...}
明明范型参数只有一个 Rhs,并且默认值是 Self,为什么那段代码可以写成 Add<T, Output=T>,这里明明有 2 个范型参数呢,一个 T,一个 Output,有点看不明白。
