这是scala中for / yield的标准格式:请注意它需要一个集合 - 其元素驱动迭代。
for (blah <- blahs) yield someThingDependentOnBlah
我的情况是循环中会发生不确定的迭代次数。内循环逻辑确定将执行的数量。
while (condition) { some logic that affects the triggering condition } yield blah
每次迭代都会生成一个序列的一个元素 - 就像编程产量一样。建议的方法是什么?
答案 0 :(得分:20)
你可以
Iterator.continually{ some logic; blah }.takeWhile(condition)
得到几乎相同的东西。你需要使用一些可变的东西(例如var)来影响条件。否则你可以
Iterator.iterate((blah, whatever)){ case (_,w) => (blah, some logic on w) }.
takeWhile(condition on _._2).
map(_._1)
答案 1 :(得分:2)
用于理解是错误的。您所描述的内容通常由unfold
完成,尽管Scala的标准库中不存在该方法。不过,你可以在Scalaz中找到它。
答案 2 :(得分:0)
另一种类似于@rexkerr建议的方法:
blahs.toIterator.map{ do something }.takeWhile(condition)
这比Iterator.continually