Если вы определяете метод While
объекта-строителя, вы можете использовать while
-циклы в своем выражения вычислений. Сигнатура метода While
:
member b.While (predicate:unit->bool, body:M<'a>) : M<'a>
Для сравнения, сигнатура метода For
:
member b.For (items:seq<'a>, body:unit->M<'a>) : M<'a>
Следует заметить, что в While
-методе тело представляет собой простой тип, а не функцию, как в For
-методе.
Вы можете встроить некоторые другие операторы, такие как let
и вызовы функций, внутрь ваших вычислений-выражений, но они могут выполняться в while
-цикле более одного раза.
builder {
while foo() do
printfn "step"
yield bar()
}
Почему цикл while
не выполняется более одного раза, а просто повторяется? Почему такое существенное отличие от for-loops? Еще лучше, есть ли какая-то предполагаемая стратегия использования циклов while в вычислительных выражениях?