假设我有一个枚举:
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
本身?
最佳答案
我认为在这种情况下您真正想要的是实现 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/