我希望能够将任何迭代器转换为 MyType
。
impl<T, I: IntoIterator<Item = T>> From<I> for MyType<T>
如在
MyType<T>::from<I: IntoIterator>(iter: I) -> MyType<T>
正如人们所期望的那样,MyType
本身可转换为 Iterator
并满足 IntoIterator
作为特征是有意义的,它确实.
但是 From
是自动为任何类型自反实现的,当然任何类型都可以转换为自身,这就是编译器咆哮的地方:
error[E0119]: conflicting implementations of trait
`std::convert::From<MyType<_>>` for type `MyType<_>`:
我对所有 IntoIterators
的通用实现与默认实现冲突。如果 Rust 没有提供默认的,那么它实际上可以工作,尽管它的成本不必要地昂贵。
除了 MyType
之外,是否有任何方法可以为 IntoIterator
的任何成员实现特征?
最佳答案
Rust标准库中其实早有先例:Iterator::collect
是关于从迭代器创建新值。
遵循此模型,而不是实现 std::convert::From
, 你应该实现 std::iter::FromIterator
.
这样就不会有冲突了。
关于rust - 在以 Self 为成员的特征上实现 From,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178842/