Swift。 GeneratorOf<T> 生成函数没有 return 正确的生成器

Swift. GeneratorOf<T> generate function doesn't return proper generator

我使用游乐场来玩一些序列和生成器。 所以我创建了 returns GeneratorOf 结构的函数,该函数假设实现 GeneratorType 和 SequenceType。我希望 generate 会给我新的完整生成器,我可以再次遍历它。但它不适用于我的 countDownGen2。

我想我误解了什么。

这里有什么问题?以及如何正确使用 GeneratorOf?

func countDown(start: Int) -> GeneratorOf<Int>
{
    var i = start
    return GeneratorOf {return i < 0 ? nil : i-- }
}

var countDownGen = countDown(10)

for i in countDownGen
{
    println(i)
}

var countDownGen2 = countDownGen.generate()

for i in countDownGen2
{
    println(i)
}

GeneratorOf<T>.generate() returns a copy of itself,并且在您的代码中,它的每个 copy 共享对一个 i[=17= 的相同引用]

所以,当你在countDownGen用完之后再做countDownGen2 = countDownGen.generate()countDownGen2也已经用完了。

你应该做的是:

func countDown(start: Int) -> SequenceOf<Int> {
    return SequenceOf { () -> GeneratorOf<Int> in
        var i = start
        return GeneratorOf { return i < 0 ? nil : i-- }
    }
}

let countDownSeq = countDown(10)

for i in countDownSeq {
    println(i)
}

for i in countDownSeq {
    println(i)
}

let countDownSeq2 = countDownSeq

for i in countDownSeq2 {
    println(i)
}