rust - 如何在 Rust 中为 Option 实现 From

假设我有一个枚举:

enum Foo {
    A,
    B,
}

...我想实现这样的东西:

impl From<char> for Option<Foo> {
    fn from(chr: char) -> Self {
        match chr {
            'A' => Some(Foo::A),
            'B' => Some(Foo::B),
            _ => None,
        }
    }
}

目前这是非法的,因为 Option是我自己的 crate ,它属于std .编译错误是:

only traits defined in the current crate can be implemented for types defined outside of the crate
define and implement a trait or new type instead rustc(E0117)

在我上面展示的情况下,在某些情况下,我想要 None而不是 Some .有没有办法实现 From我能够得到 Option<U>而不是 U本身?


环境

  • 使用rust 1.62.1

最佳答案

我认为在这种情况下您真正想要的是实现 TryFrom取而代之的是特质。

例如(理想情况下,您应该创建一个正确的 Error 类型而不是 str):

impl TryFrom<char> for Foo {
    type Error = &'static str;

    fn try_from(chr: char) -> Result<Foo, Self::Error> {
        match chr {
            'A' => Ok(Foo::A),
            'B' => Ok(Foo::B),
            _ => Err("can't convert character to Foo"),
        }
    }
}

关于rust - 如何在 Rust 中为 Option<U> 实现 From<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73200086/

相关文章:

r - 选择仅连续运行特定值的组

javascript - 如何分隔字符串中的标签

r - 如何在 R 中生成向量的所有可能的连续 n 元组?

python - 如何处理在 FastAPI 中混淆的路径操作?

python - 计算 pandas 数据框行中 Python 列表中元素的出现次数

c# - 自定义授权过滤最小 API .Net 6

awk - 如何使用 awk 从列表中获取特定列

c++ - 创建其他对象时如何使用同一个对象实例?

r - 如何在R中自动使函数的结果成为同一函数的参数

kotlin - 如何将 `throw` 放入辅助函数中但仍然具有空安全性?