我可以在 Rust 中创建字符串枚举吗?

Kan*_*now 6 enums rust

我想知道是否可以enum在 Rust 中使用常量字符串值创建?

我发现了上一个问题:如何将枚举作为字符串获取?它显示了一个解决方法,我可以用它来字符串化 的变体enum(我可以.to_string()enum变体上使用并将它们的名称作为字符串)。

这个问题很有帮助,但这就是我想要实现的目标:

enum StringEnum {
    Hello = "Hello",
    World = "World"
}
Run Code Online (Sandbox Code Playgroud)

Ibr*_*med 5

如果您在 Rust 中有这样的枚举:

enum MyEnum {
    Hello,
    World
}
Run Code Online (Sandbox Code Playgroud)

Hello并且World是枚举变体。在 Rust 中,将每个变体表示为字符串是行不通的,因为每个变体的字符串长度不同,占用的字节数也不同。

Rust 中枚举的每个变体都分配给一个整数值。这是有效的,因为机器整数占用指定数量的位(例如i32vs i8),因此每个变体都具有相同的大小。

如果您希望能够将枚举转换为字符串,则需要实现一个 method/formatter 。最简单的方法是使用strum_macros板条箱:

#[derive(strum_macros::Display)]
pub enum StringEnum {
    Hello,
    World
}


fn main() {
    let hello: &'static str = StringEnum::Hello.into(); // "Hello"
    let world: String = StringEnum::World.to_string(); // "World"
}
Run Code Online (Sandbox Code Playgroud)

How do I get an enum as a string? 中提到了其他几种方法