Enumerationen, die mit Konstanten Werten in Rust
Kann ich dies tun:
enum MyEnum {
A(i32),
B(i32),
}
aber nicht dieses:
enum MyEnum {
A(123), //123 is a constant
B(456), //456 is a constant
}
Kann ich die Schaffung von Strukturen für A
und B
mit einem einzigen Feld und implementieren Sie dann das Feld, aber ich denke, es könnte einen einfacheren Weg. Gibt es eine?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der beste Weg zur Beantwortung dieser arbeitet heraus, warum Sie wollen, Konstanten in einem enum: Sie sind nur assoziieren einen Wert mit jeder Variante, oder willst du jede Variante zu werden, dass der Wert (wie ein
enum
in C oder C++)?Für den ersten Fall, ist es wahrscheinlich mehr Sinn macht, lassen Sie einfach den enum-Varianten mit keine Daten, und eine Funktion:
Dieser Ansatz angewendet werden kann viele Male, zu assoziieren viele separate Stücke von Informationen, die mit jeder Variante, z.B. möchten Sie vielleicht eine
.name() -> &'static str
Methode zu.Alternativ, für den zweiten Fall, können Sie explizite Werte für tag wie C/C++:
Dies kann
match
ed in allen die gleichen Möglichkeiten, kann aber auch umgewandelt werden in eine GanzzahlMyEnum::A as i32
. (Beachten Sie, dass Rechnungen wieMyEnum::A | MyEnum::B
sind nicht automatisch legal in Rust: enums haben bestimmte Werte, Sie sind nicht bit-flags.)value
- Funktion)?Menschen, die sich auf diese möglicherweise stolpern die Einführung und Streichung von
FromPrimitive
. Ein Austausch möglich, das kann auch hilfreich sein hier ist enum_primitive. Es ermöglicht die Verwendung von C-wie enums und haben Sie gewirkt, die zwischen der numerischen und logischen Darstellung:Andere alternative ist die enum-Karte Kiste. Dies bietet die Möglichkeit, einen Wert zuweisen, die enum-Eintrag. Was mehr ist, Sie können verwenden Sie dieses makro mit unterschiedlichen Wert-Typen.