Можно использовать цикл while с выходом в scala
Вот стандартный формат для for/yield в scala: обратите внимание, что он ожидает коллекцию, элементы которой управляют итерацией.
for (blah <- blahs) yield someThingDependentOnBlah
У меня есть ситуация, когда неопределенное количество итераций будет происходить в цикле. Логика внутреннего цикла определяет, сколько будет выполнено.
while (condition) { some logic that affects the triggering condition } yield blah
Каждая итерация будет генерировать один элемент последовательности - точно так же, как запрограммирован выход. Каков рекомендуемый способ сделать это?
Ответы
Ответ 1
Вы можете
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)
Ответ 2
Использование для понимания - неправильная вещь для этого. То, что вы описываете, обычно выполняется с помощью unfold
, хотя этот метод отсутствует в стандартной библиотеке Scala. Однако вы можете найти его в Scalaсе.
Ответ 3
Другой способ, аналогичный предложению @rexkerr:
blahs.toIterator.map{ do something }.takeWhile(condition)
Это кажется немного более естественным, чем Iterator.continually