面试题答案
一键面试场景
- 代码复用:在不同类型上实现相同的行为,通过泛型和特征结合可以复用算法逻辑。例如,对不同类型的集合进行排序,只要这些类型实现了
Ord
特征。 - 抽象和多态:可以定义抽象接口(特征),通过泛型让不同类型实现该接口,从而实现多态行为。比如,定义一个绘图接口,不同的图形类型(圆形、矩形等)实现该接口,使用泛型来处理不同图形的绘制。
代码示例
// 定义一个特征
trait Addable {
fn add(&self, other: &Self) -> Self;
}
// 为i32类型实现Addable特征
impl Addable for i32 {
fn add(&self, other: &Self) -> Self {
*self + *other
}
}
// 泛型函数,接受实现了Addable特征的类型
fn add_values<T: Addable>(a: &T, b: &T) -> T {
a.add(b)
}
fn main() {
let num1: i32 = 5;
let num2: i32 = 3;
let result = add_values(&num1, &num2);
println!("The result is: {}", result);
}
在上述代码中,我们定义了Addable
特征,为i32
类型实现了该特征。然后通过泛型函数add_values
,可以对任何实现了Addable
特征的类型进行加法操作,这里展示了特征与泛型结合实现代码复用和抽象的应用。