MST

星途 面试题库

面试题:Rust泛型约束在结构体和方法中的应用

定义一个结构体`Pair<T, U>`,其中`T`和`U`是泛型类型。为`Pair`结构体实现一个方法`sum`,该方法只有当`T`和`U`都实现了`std::ops::Add` trait且它们相加的结果类型与`T`相同的时候才能被调用。请写出完整的Rust代码,并解释这里用到的泛型约束和trait bound是如何工作的。
28.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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的解释

  1. 泛型约束
    • 在Rust中,泛型参数TU允许我们编写可以处理多种具体类型的代码。例如,在Pair<T, U>结构体定义中,TU可以是任何类型。
  2. 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方法。