MST
星途 面试题库

面试题:Rust中trait完全限定语法与泛型的结合

定义一个`trait` `MathOps`,包含方法`add`和`subtract`。定义一个泛型结构体`Calculator<T>`,其中`T`实现了`MathOps`。编写一个函数`perform_calculation`,它接收一个`Calculator<T>`类型的实例,并使用trait完全限定语法分别调用`add`和`subtract`方法。要求代码能够处理不同类型实现`MathOps`的情况,并且要考虑泛型生命周期问题。请写出完整代码及必要注释。
17.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义一个trait MathOps,包含add和subtract方法
trait MathOps {
    fn add(&self, a: Self, b: Self) -> Self;
    fn subtract(&self, a: Self, b: Self) -> Self;
}

// 定义一个泛型结构体Calculator<T>,其中T实现了MathOps
struct Calculator<T>
where
    T: MathOps,
{
    value: T,
}

// 编写一个函数perform_calculation,它接收一个Calculator<T>类型的实例,
// 并使用trait完全限定语法分别调用add和subtract方法
fn perform_calculation<T>(calc: &Calculator<T>)
where
    T: MathOps,
{
    let a = calc.value.clone();
    let b = calc.value.clone();
    // 使用trait完全限定语法调用add方法
    let result_add = <T as MathOps>::add(&a, a, b);
    // 使用trait完全限定语法调用subtract方法
    let result_subtract = <T as MathOps>::subtract(&a, a, b);
    println!("Addition result: {:?}", result_add);
    println!("Subtraction result: {:?}", result_subtract);
}