MST

星途 面试题库

面试题:Rust 泛型 trait 中关联类型的复杂约束

定义一个泛型 trait `Container`,它有一个关联类型 `Item`。再定义另一个 trait `Processable`,其方法接受 `Container` 类型的参数且 `Container` 的 `Item` 类型需要实现 `Clone` trait。请编写代码实现上述需求,并给出一个结构体实现 `Container` trait 且其 `Item` 类型为 `String`,同时展示如何使用 `Processable` trait 对该结构体进行操作。
49.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义泛型trait Container
trait Container {
    type Item;
}

// 定义trait Processable
trait Processable {
    fn process(&self, container: &impl Container<Item = impl Clone>);
}

// 定义结构体实现Container trait,Item类型为String
struct MyContainer {
    items: Vec<String>,
}

impl Container for MyContainer {
    type Item = String;
}

// 定义一个结构体实现Processable trait
struct Processor;

impl Processable for Processor {
    fn process(&self, container: &impl Container<Item = impl Clone>) {
        if let Some(item) = container.items.first() {
            let cloned_item = item.clone();
            println!("Processed item: {}", cloned_item);
        }
    }
}

你可以这样使用:

fn main() {
    let my_container = MyContainer {
        items: vec!["Hello".to_string(), "World".to_string()],
    };
    let processor = Processor;
    processor.process(&my_container);
}