gpt4 book ai didi

ios - swift 。 GeneratorOf 生成函数不返回正确的生成器

转载 作者:可可西里 更新时间:2023-11-01 01:05:51 24 4
gpt4 key购买 nike

我使用 playground 来玩一些序列和生成器。所以我创建了返回 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 ,并且在您的代码中,它的每个 副本 都共享对一个 i 的相同引用

所以,当你做 countDownGen2 = countDownGen.generate()countDownGen 之后累死了,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)
}

关于ios - swift 。 GeneratorOf<T> 生成函数不返回正确的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com