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

标签 rust enums

我想知道是否可以创建 enum在 Rust 中使用常量字符串值?
我发现了以前的问题:How do I get an enum as a string?它显示了我可以用来字符串化 enum 的变体的解决方法(我可以在 .to_string() 变体上使用 enum 并将它们的名称作为字符串获取)。
这个问题很有帮助,但这就是我想要实现的目标:

enum StringEnum {
    Hello = "Hello",
    World = "World"
}

最佳答案

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

enum MyEnum {
    Hello,
    World
}
HelloWorld是枚举变体。在 Rust 中,将每个变体表示为字符串是行不通的,因为每个变体的字符串长度不同,占用的字节数也不同。
Rust 中枚举的每个变体都分配给一个整数值。这是有效的,因为机器整数占用指定数量的位(例如 i32 vs 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"
}
How do I get an enum as a string? 中还提到了其他几种方法

关于rust - 我可以在 Rust 中创建字符串枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65040158/

相关文章:

generics - 泛型结构的构造函数中出现 "Expected type parameter"错误

rust - 如何在实现 Debug 时访问指定的精度?

if-statement - 在 Rust 程序中,当条件为 "if"时,会执行 "false"语句,如何理解?

enums - 当枚举变体已知时解包内部类型

c++ - 声明指向二维枚举数组的指针

java - 枚举实现接口(interface)被 validator 拒绝 (java.lang.VerifyError)

multithreading - 在多个线程中改变共享可变变量

loops - 如何在for循环中跟踪先前的索引? ( rust )

c++ - C++ OOP 中的获取和设置方法

java - 带有字符串和列表的枚举?