use std::ops::Add;
// 定义结构体
struct Pair<T, U> {
first: T,
second: U,
}
// 为Pair结构体实现sum方法
impl<T, U> Pair<T, U>
where
T: Add<U, Output = T>,
{
fn sum(&self) -> T {
self.first.clone() + self.second.clone()
}
}
泛型约束和trait bound的解释
- 泛型约束:
- 在Rust中,泛型参数
T
和U
允许我们编写可以处理多种具体类型的代码。例如,在Pair<T, U>
结构体定义中,T
和U
可以是任何类型。
- trait bound:
where T: Add<U, Output = T>
这部分是trait bound。
T: Add<U>
表示类型T
必须实现Add
trait,并且这个Add
trait要能接受类型U
作为参数。这意味着T
类型的对象必须支持与U
类型的对象进行加法操作。
Output = T
进一步约束了加法操作的返回类型必须也是T
。这样就确保了sum
方法返回的类型与first
字段的类型相同,符合题目要求。只有满足这些trait bound条件的类型组合,才能为Pair
结构体调用sum
方法。