MST

星途 面试题库

面试题:Rust特征中泛型在高级场景的运用

在Rust中,假设有一个特征 `Transformer`,它有一个泛型参数 `T`。要求实现一个函数 `transform_collection`,该函数接收一个实现了 `IntoIterator<Item = T>` 的集合,并且集合中的 `T` 实现了 `Transformer` 特征。`transform_collection` 函数需要对集合中的每个元素应用 `Transformer` 特征的转换方法,并返回一个新的集合,新集合的类型和原集合相同,但元素是转换后的结果。请详细编写该特征、函数以及相关的测试代码。
27.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义特征Transformer
trait Transformer<T> {
    fn transform(&self, value: T) -> T;
}

// 实现transform_collection函数
fn transform_collection<T, I, C>(collection: C) -> C
where
    C: IntoIterator<Item = T>,
    C: FromIterator<T>,
    T: Transformer<T>,
{
    collection.into_iter()
        .map(|item| item.transform(item))
        .collect()
}

// 测试代码
#[cfg(test)]
mod tests {
    use super::*;

    // 实现一个简单的Transformer实例用于测试
    struct AddOne;
    impl Transformer<i32> for AddOne {
        fn transform(&self, value: i32) -> i32 {
            value + 1
        }
    }

    #[test]
    fn test_transform_collection() {
        let original = vec![1, 2, 3];
        let result = transform_collection::<i32, _, Vec<i32>>(original);
        let expected = vec![2, 3, 4];
        assert_eq!(result, expected);
    }
}