Learning Rust Мне нужно сравнить варианты внутри вложенных перечислений.Учитывая следующее перечисление, как я могу сравнить реальные варианты мгновенных BuffTurget
?
enum Attribute {
Strength,
Agility,
Intellect,
}
enum Parameter {
Health,
Mana,
}
enum BuffTarget {
Attribute(Attribute),
Parameter(Parameter),
}
Поиск в Интернете привел меня к `дискриминанту и особенно для функции сравнения, подобной этой:
fn variant_eq<T>(a: &T, b: &T) -> bool {
std::mem::discriminant(a) == std::mem::discriminant(b)
}
К сожалению, эта функция не работает в моем случае:
#[test]
fn variant_check_is_working() {
let str = BuffTarget::Attribute(Attribute::Strength);
let int = BuffTarget::Attribute(Attribute::Intellect);
assert_eq!(variant_eq(&str, &int), false);
}
// Output:
// thread 'tests::variant_check' panicked at 'assertion failed: `(left == right)`
// left: `true`,
// right: `false`', src/lib.rs:11:9
В идеале я хотел бы, чтобы мой код был примерно таким, используя if let
:
let type_1 = get_variant(BuffTarget::Attribute(Attribute::Strength));
let type_2 = get_variant(BuffTarget::Attribute(Attribute::Intellect));
if let type_1 = type_2 {
println!("Damn it!")
} else { println!("Success!!!") }