Il modo migliore per rispondere a questa sta lavorando perché si vuole costanti in un enum: sei solo associando un valore con ogni variante, o non si desidera che ogni variante alla essere tale valore (come un enum
in C o C++)?
Per il primo caso, probabilmente ha più senso di lasciare solo le varianti enum senza dati, e fare una funzione:
enum MyEnum {
A,
B,
}
impl MyEnum {
fn value(&self) -> i32 {
match *self {
MyEnum::A => 123,
MyEnum::B => 456,
}
}
}
// call like some_myenum_value.value()
Questo approccio può essere applicato più volte, ad associare molti pezzi separati di informazioni con ogni variante, ad es forse vuoi anche un metodo .name() -> &'static str
.
In alternativa, per il secondo caso, è possibile assegnare i valori delle variabili esplicite proprio come C/C++:
enum MyEnum {
A = 123,
B = 456,
}
questo può essere match
ed in in tutti allo stesso modo, ma può anche essere lanciato in un intero MyEnum::A as i32
. (Si noti che i calcoli come MyEnum::A | MyEnum::B
non sono automaticamente legale in Rust: enumerazioni hanno valori specifici, non sono bit-flag.)