Iterator 这是迭代一组值的标准方法吗?

Iterator 这是迭代一组值的标准方法吗?,iterator,rust,Iterator,Rust,我有一个具有可枚举值集的类型: struct MyType(u32); struct MyTypeIter { m: MyType, } impl Iterator for MyTypeIter { type Item = MyType; fn next(&mut self) -> Option<Self::Item> { if (self.m).0 < 0xffffffff { (self.m).

我有一个具有可枚举值集的类型:

struct MyType(u32);
struct MyTypeIter {
    m: MyType,
}
impl Iterator for MyTypeIter {
    type Item = MyType;
    fn next(&mut self) -> Option<Self::Item> {
        if (self.m).0 < 0xffffffff {
            (self.m).0 += 1;
            Some(MyType((self.m).0 - 1))
        } else {
            None
        }
    }
}
impl MyTypeIter {
    fn new() -> MyTypeIter {
        MyTypeIter { m: MyType(0) }
    }
}
我可以在一组值上定义迭代器:

struct MyType(u32);
struct MyTypeIter {
    m: MyType,
}
impl Iterator for MyTypeIter {
    type Item = MyType;
    fn next(&mut self) -> Option<Self::Item> {
        if (self.m).0 < 0xffffffff {
            (self.m).0 += 1;
            Some(MyType((self.m).0 - 1))
        } else {
            None
        }
    }
}
impl MyTypeIter {
    fn new() -> MyTypeIter {
        MyTypeIter { m: MyType(0) }
    }
}
struct MyTypeIter{
m:MyType,
}
MyTypeIter的impl迭代器{
类型项=MyType;
fn下一步(&mut self)->选项{
if(self.m).0<0xffffffff{
(self.m).0+=1;
一些(MyType((self.m.0-1))
}否则{
没有一个
}
}
}
impl-MyTypeIter{
fn new()->MyTypeIter{
MyTypeIter{m:MyType(0)}
}
}
这真的是一种规范的方式吗?如果我们有几个自然顺序(比如在lex/colex顺序中迭代排列或组合),该怎么办

如果我们有几个自然顺序(比如在lex/colex顺序中迭代排列或组合),该怎么办

为不同的迭代顺序实现不同的迭代器类型。您可以使用多个迭代器类型,而不是
MyTypeIter
,例如
MyTypePermutationIter
MyTypeCombinationIter

标准库在许多地方采用这种方法。以字符串切片类型为例。您可以自然地迭代字符串的字节、UTF-8字符或行(举几个例子)。为此,
str
公开了不同的方法:

  • 返回迭代器
  • 返回迭代器
  • 返回迭代器

您的
MyTypeIter
永远不会产生值
MyType(0)
。请注意,我正在减去1。无论如何,这不是真正的代码,只是一个过于简单的示例。好吧,所以它永远不会产生
MyType(u32::max\u value())
。简化的例子很好,我只是不想让你不知道这个bug。哦,是的,我现在明白了。非常感谢。