从具有Self成为

时间:2017-02-11 17:21:11

标签: rust traits

我希望能够将任何迭代器转换为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的任何成员实施特征?

1 个答案:

答案 0 :(得分:4)

Rust标准库实际上有一个先例:Iterator::collect是关于从迭代器创建一个新值。

遵循此模型,您应该实施std::convert::From

,而不是实施std::iter::FromIterator

然后就不会有冲突。