rust - 在以 Self 为成员的特征上实现 From

标签 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 没有提供默认的,那么它实际上可以工作,尽管它的成本不必要地昂贵。

除了 MyType 之外,是否有任何方法可以为 IntoIterator 的任何成员实现特征?

最佳答案

Rust标准库中其实早有先例:Iterator::collect是关于从迭代器创建新值。

遵循此模型,而不是实现 std::convert::From , 你应该实现 std::iter::FromIterator .

这样就不会有冲突了。

关于rust - 在以 Self 为成员的特征上实现 From,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178842/

相关文章:

c# - 在没有类型实例的情况下打开 C# 中的类型

rust - Rust实现Arc <Bar>到Arc <dyn Foo>的特征

rust - 结构可以在 Rust 中实现两个具有冲突方法名称的特征吗?

rust - 如何为 Hyper 处理程序共享可变状态?

rust - 为什么在将闭包作为特征对象参数传递时需要强制转换?

scala - "apply"在 Scala 的伴生对象(带有 Trait)中如何工作?

rust - 更改结构中一个字段的简单方法?

当代码不是时,Rust 编译器提示在循环中使用移动值

types - 使用 where 子句 : Implementing a simple where clause 的特征实现

generics - 如何为对特征本身的关联类型的引用编写特征绑定(bind)?