rust 我可以创建字符串枚举吗?

332nm8kg  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(135)

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

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

but5z9lq1#

如果你有这样的枚举:

enum HelloWorld {
    Hello,
    World
}

HelloWorld是枚举 * 变量 *。枚举的每个变量都被赋给一个整数值。这就是discriminant。目前,判别式只允许是整数,而不是像&'static str这样的任意类型,尽管将来可能会改变。
如果你想把枚举转换成字符串,你可以写一个方法来手动完成:

impl HelloWorld {
    fn as_str(&self) -> &'static str {
        match self {
            HelloWorld::Hello => "Hello",
            HelloWorld::World => "World"
        }
    }
}

或者,您可以使用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?中还提到了其他一些方法

tp5buhyn

tp5buhyn2#

您还可以使用带有数据的枚举

pub enum TokenType<'a> {
    STRING(&'a str),
}

然后this会给予“测试”值。

pub fn test() {
    let token = TokenType::STRING("test");
    if let TokenType::STRING(value) = token {
        println!("{:?}", value)
    }
}

相关问题