繁体   English   中英

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

[英]Can I create string enum in Rust?

我想知道是否可以在 Rust 中创建具有常量字符串值的enum

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

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

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

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

enum MyEnum {
    Hello,
    World
}

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

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

如果您希望能够将枚举转换为字符串,则需要实现方法/格式化程序。 最简单的方法是使用strum_macros crate:

#[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"
}

如何将枚举作为字符串获取中提到了其他几种方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM