Rust 将范围作为结构字段

Rust 将范围作为结构字段,rust,traits,Rust,Traits,有多种范围类型。一些范围类型实现了迭代器。我想将实现迭代器的所有Range类型作为结构字段 这是我的方法: pub trait RangeBoundsExt:Iterator{ //一些方法 } std::ops::Range{}的impl RangeBoundsExt std::ops::RangeFrom{} std::ops::RangeInclusive{} pub struct Foo{ 范围:盒子 } 但我得到了这个错误: 编译操场v0.0.1(/playerd) 错误[E027

有多种
范围
类型。一些
范围
类型实现了
迭代器
。我想将实现迭代器的所有
Range
类型作为结构字段

这是我的方法:

pub trait RangeBoundsExt:Iterator{
//一些方法
}
std::ops::Range{}的impl RangeBoundsExt
std::ops::RangeFrom{}
std::ops::RangeInclusive{}
pub struct Foo{
范围:盒子
}

但我得到了这个错误:

编译操场v0.0.1(/playerd)
错误[E0277]:未满足特性绑定'T:std::iter::Step'
-->src/lib.rs:7:24
|
7 | std::ops::Range{}的impl RangeBoundsExt
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`
|
=注:由于对`std::ops::Range`的`std::iter::Iterator`的impl有要求,因此需要`
帮助:考虑进一步限制这个界限
|
7 | std::ops::Range{}的impl RangeBoundsExt
|                       ^^^^^^^^^^^^^^^^^
错误[E0277]:未满足特性绑定'T:std::iter::Step'
-->src/lib.rs:9:24
|
9 | std::ops::RangeFrom{}
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`
|
=注:由于对`std::ops::RangeFrom`的`std::iter::Iterator`的impl有要求,因此需要`
帮助:考虑进一步限制这个界限
|
9 | std::ops::RangeFrom{}
|                       ^^^^^^^^^^^^^^^^^
错误[E0277]:未满足特性绑定'T:std::iter::Step'
-->src/lib.rs:11:24
|
11 | std::ops::RangeInclusive{}的impl RangeBoundsExt
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`
|
=注:由于对`std::ops::RangeInclusive`的`std::iter::Iterator`的impl有要求,因此需要`
帮助:考虑进一步限制这个界限
|
11 | std::ops::RangeInclusive{}的impl RangeBoundsExt
|                       ^^^^^^^^^^^^^^^^^
错误:由于之前的3个错误而中止
有关此错误的详细信息,请尝试“rustc--explain E0277”。
错误:无法编译“游乐场”。
要了解更多信息,请使用--verbose再次运行该命令。

范围
不保证迭代器的实现。仅当类型实现
步骤时,它才提供一个。同样地,
RangeTo
也不能保证缺少
迭代器
实现。它只是默认情况下不提供一个。要修复错误,您只需要求该范围具有迭代器定义:

//注意附加的“where”要求
std::ops::Range where的impl Range boundsext
std::ops::Range:迭代器
{
}
std::ops::RangeFrom where的impl RangeBoundsExt
std::ops::RangeFrom:迭代器
{
}
std::ops::RangeInclusive的impl RangeBoundsExt,其中
std::ops::RangeInclusive:迭代器
{
}