面试题答案
一键面试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);
}