可以使用while循环和scala中的yield

时间:2014-10-25 00:27:31

标签: scala yield

这是scala中for / yield的标准格式:请注意它需要一个集合 - 其元素驱动迭代。

for (blah <- blahs) yield someThingDependentOnBlah

我的情况是循环中会发生不确定的迭代次数。内循环逻辑确定将执行的数量。

while (condition) { some logic that affects the triggering condition } yield blah

每次迭代都会生成一个序列的一个元素 - 就像编程产量一样。建议的方法是什么?

3 个答案:

答案 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

更自然