MST

星途 面试题库

面试题:Rust枚举变体模式匹配在复杂数据结构中的应用

定义一个嵌套的数据结构,外层是一个枚举`Message`,它有两个变体`PlainText(String)`和`ComplexMessage(Vec<Message>)`。编写一个函数`print_message`,该函数接受一个`Message`实例,使用递归的模式匹配来打印出所有的`PlainText`内容。例如,如果是`PlainText`变体,直接打印字符串;如果是`ComplexMessage`变体,递归调用`print_message`处理内部的`Message`向量。同时要处理循环引用的情况,避免无限递归。
26.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::collections::HashSet;

enum Message {
    PlainText(String),
    ComplexMessage(Vec<Message>),
}

fn print_message(message: &Message, visited: &mut HashSet<&Message>) {
    if visited.contains(message) {
        println!("Circular reference detected");
        return;
    }
    visited.insert(message);

    match message {
        Message::PlainText(text) => println!("{}", text),
        Message::ComplexMessage(sub_messages) => {
            for sub_message in sub_messages {
                print_message(sub_message, visited);
            }
        }
    }
    visited.remove(message);
}

你可以使用如下方式调用这个函数:

fn main() {
    let msg1 = Message::PlainText("Hello".to_string());
    let msg2 = Message::ComplexMessage(vec![msg1.clone()]);
    let msg3 = Message::ComplexMessage(vec![msg2.clone()]);
    let mut visited = HashSet::new();
    print_message(&msg3, &mut visited);
}