我希望能够将任何迭代器转换为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没有提供默认值,那么它实际上会起作用,虽然价格不必要。
除了IntoIterator
之外,有没有办法为MyType
的任何成员实施特征?
答案 0 :(得分:4)
Rust标准库实际上有一个先例:Iterator::collect
是关于从迭代器创建一个新值。
遵循此模型,您应该实施std::convert::From
。
std::iter::FromIterator
然后就不会有冲突。