给定两个任意大小的类型T和U,其中U: From,标准库为什么没有提供From> for Option的原因是什么?我尝试过这样做,但是得到了冲突的实现错误,所以显然存在限制,只是不确定具体在哪里。是的,我知道可以使用Option::map()来实现,但是似乎标准库应该直接提供这个功能。
错误
enum Opt<T> {
Some(T),
None,
}
impl<T: From<U>, U> From<Opt<T>> for Opt<U> {
fn from(opt: Opt<T>) -> Self {
match opt {
Opt::Some(t) => Opt::Some(t.into()),
Opt::None => Opt::None,
}
}
}
struct A;
struct B;
impl From<A> for B {
fn from(_: A) -> Self {
B
}
}
fn main() {
let a = Opt::Some(A);
let _b: Opt<B> = a.into();
}
错误
error[E0119]: conflicting implementations of trait `From<Opt<_>>` for type `Opt<_>`
--> src/bin/main.rs:6:1
|
6 | impl<T: From<U>, U> From<Opt<T>> for Opt<U> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: conflicting implementation in crate `core`:
- impl<T> From<T> for T;
a.map(A::Into)
,要么是a.map(B::From)
。(问题暗示使用map()
;只是为了方便未来的访问者,我想更明确地表达一下。) - undefined