这是迭代一组值的规范方法吗?

lan*_*key 0 iterator rust

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

struct MyType(u32);
Run Code Online (Sandbox Code Playgroud)

我可以在一组值上定义一个迭代器:

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) }
    }
}
Run Code Online (Sandbox Code Playgroud)

这真的是规范的做法吗?如果我们有几个自然顺序(比如在lex/colex顺序中迭代排列或组合)会怎样?

kaz*_*ase 8

如果我们有几个自然顺序(比如在lex/colex顺序中迭代排列或组合)会怎样?

为不同的迭代顺序实现不同的迭代器类型.而不是MyTypeIter你可以有多个迭代器类型,如MyTypePermutationIterMyTypeCombinationIter.

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