面试题答案
一键面试以下以 Rust 语言为例:
// 定义泛型结构体 Pair
struct Pair<T, U> {
first: T,
second: U,
}
// 为 Pair 结构体实现方法
impl<T, U> Pair<T, U> {
// 交换 first 和 second 的值
fn swap(&mut self) {
std::mem::swap(&mut self.first, &mut self.second);
}
}
// 定义一个 trait 来处理组合逻辑
trait Combine<T, U> {
type Output;
fn combine(t: T, u: U) -> Self::Output;
}
// 实现字符串拼接的 Combine trait
impl Combine<&str, &str> for Pair<&str, &str> {
type Output = String;
fn combine(t: &str, u: &str) -> Self::Output {
t.to_string() + u
}
}
// 实现数字相加的 Combine trait
impl Combine<i32, i32> for Pair<i32, i32> {
type Output = i32;
fn combine(t: i32, u: i32) -> Self::Output {
t + u
}
}
// 实现方法 combine
impl<T, U> Pair<T, U>
where
Self: Combine<T, U>,
{
fn combine(&self) -> <Self as Combine<T, U>>::Output {
Combine::combine(&self.first, &self.second)
}
}
解释:
- 泛型结构体定义:首先定义了一个泛型结构体
Pair
,它包含两个泛型成员first
和second
。 swap
方法:通过std::mem::swap
来交换first
和second
的值。- 特征边界和泛型关联类型:
- 定义了
Combine
trait,它有一个泛型关联类型Output
表示组合后的结果类型,还有一个combine
方法用于执行组合逻辑。 - 分别为
&str
和i32
类型实现了Combine
trait,定义了不同类型的组合逻辑。 - 在
combine
方法的impl
块中,使用特征边界Self: Combine<T, U>
来限制只有实现了Combine
trait 的Pair
类型才能调用combine
方法,并通过<Self as Combine<T, U>>::Output
获取组合结果的类型。
- 定义了