For loop 为什么我在编译稳定代码时会遇到一个关于缺少不稳定特性(std::iter::Step,编译器不允许我实现)的错误?

For loop 为什么我在编译稳定代码时会遇到一个关于缺少不稳定特性(std::iter::Step,编译器不允许我实现)的错误?,for-loop,rust,iterator,range,For Loop,Rust,Iterator,Range,我想定义一个函数,它允许我在一系列结构实例上返回迭代器 我已经在usize(参见简化代码示例)等标准类型上尝试了相同的功能,这很有效(尽管有点尴尬)。我不能在我想到的场景中使用标准类型,因此这对解决方案没有帮助,但它帮助我理解了这里存在某种问题 #[派生(调试)] 结构神话(); fn main(){ 让好的=0使用..=10使用; //也适用于*good.start()…=*good.end()中的内容{ 对于0usize中的对象..=10usize{ dbg!(东西); } dbg!(好);

我想定义一个函数,它允许我在一系列结构实例上返回迭代器

我已经在usize(参见简化代码示例)等标准类型上尝试了相同的功能,这很有效(尽管有点尴尬)。我不能在我想到的场景中使用标准类型,因此这对解决方案没有帮助,但它帮助我理解了这里存在某种问题

#[派生(调试)]
结构神话();
fn main(){
让好的=0使用..=10使用;
//也适用于*good.start()…=*good.end()中的内容{
对于0usize中的对象..=10usize{
dbg!(东西);
}
dbg!(好);
让bad=MyThing()…=MyThing();
对于*bad.start()…=*bad.end()中的内容{
dbg!(东西);
}
dbg!(坏);
}
$cargo--版本
货运1.35.0(6f3e9c367 2019-04-04)
$cargo build
编译huh v0.1.0(huh)
错误[E0277]:未满足特性绑定'MyThing:std::iter::Step'
-->src/main.rs:13:18
|
13 |对于*bad.start()..=*bad.end()中的内容{
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^未为`神话化实现`
|
=注:由于对`std::ops::RangeInclusive`的`std::iter::Iterator`的impl有要求,因此需要`
我不希望稳定编译器告诉我缺少一个不稳定的特性。我可能有一些其他类型的问题,我不明白,但稳定编译器告诉我,我的问题是我没有实现一个不稳定的特性。我肯定不能像那样修复我的代码(不切换到不稳定)

我想我试图理解的是,是否有可能基于用户定义的类型定义一个范围,然后可以对其进行迭代

有人能解释一下发生了什么,并提出解决问题的方法吗


这不会导致任何性能开销。

目前,您不可能在稳定的编译器(从1.36.0开始)上实现该特性

这种“模式”在锈迹斑斑的世界中并不少见,例如,请参阅方法中使用的trait,因此您可以使用字符串、字符或闭包来搜索某些内容


不稳定是指在这种情况下,特征的实际特征可能会发生变化,因此不稳定编译器您选择的代码可能会中断,因为特征、函数的签名会发生变化。

我可能会实现您所描述的我希望的目标,感谢您的建议和解释。更一般的一点是“编译器在这类情况下是否会更有帮助?”-我想这是更有经验的Rustacean人都知道的。
= note: required because of the requirements on the impl of `std::iter::Iterator` for `std::ops::RangeInclusive<MyThing>`
impl From<usize> for Thing {
    fn from(index: usize) -> Thing {
        Thing()
    }
}

for i in 0..=10 {
    let thing = Thing::from(i);
    dbg!(thing);
}