Интересуют не либы, а идиоматическое решение задачи вида:
Rust:
enum Data {
Number(u32),
String(String),
}
let mut items = Vec::new();
items.push(Data::Number(5));
items.push(Data::String("text".to_string()));
for item in items {
match item {
Data::Number(n) => println!("Number {}", n),
Data::String(ref s) => println!("String {}", s),
}
}
C++:
std::vector<std::variant<int, std::string>> items;
items.push_back(5);
items.push_back("text");
for (const auto &item : items) {
if (const auto n = std::get_if<int>(&item)) {
std::cout << "Number " << *n << std::endl;
} else if (const auto &s = std::get_if<std::string>(&item)) {
std::cout << "String " << *s << std::endl;
}
}
Как это повторить на python и go?
То есть нужно заполнить вектор/список/массив объектами разных типов (желательно с гарантиями) и затем пробежаться по ним, забирая значение каждого типа.