gpt4 book ai didi

string - 我可以在 Rust 中将字符串转换为没有宏的枚举吗?

转载 作者:行者123 更新时间:2023-11-29 07:46:08 41 4
gpt4 key购买 nike

例如,如果我有这样的代码:

enum Foo {
Bar,
Baz,
Bat,
Quux
}

impl Foo {
from(input: &str) -> Foo {
Foo::input
}
}

这显然会失败,因为 input 不是 Foo 的方法。我可以手动输入:

from(input: &str) -> Foo {
match(input) {
"Bar" => Foo::Bar,
// and so on...
}
}

但我没有得到自动的便利。

看起来 Java 有一个 string lookup function用于此特定目的的枚举。

是否可以在不编写我自己的宏或从 crate 中导入宏的情况下获得它?

最佳答案

你应该实现 std::str::FromStr特质。

use std::str::FromStr;

#[derive(Debug, PartialEq)]
enum Foo {
Bar,
Baz,
Bat,
Quux,
}

impl FromStr for Foo {

type Err = ();

fn from_str(input: &str) -> Result<Foo, Self::Err> {
match input {
"Bar" => Ok(Foo::Bar),
"Baz" => Ok(Foo::Baz),
"Bat" => Ok(Foo::Bat),
"Quux" => Ok(Foo::Quux),
_ => Err(()),
}
}
}



fn main() {
// Use it like this
let f = Foo::from_str("Baz").unwrap();
assert_eq!(f, Foo::Baz);
}

代码生成(又名自动便利)和反射通常需要付出代价。实际上,您不太可能最终得到多个枚举变体。

playground 中运行

关于string - 我可以在 Rust 中将字符串转换为没有宏的枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070244/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com