Если вы определяете метод While объекта-строителя, вы можете использовать While -loops в выражения вычислений. Подпись метода 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 -loop более одного раза.
builder {
while foo() do
printfn "step"
yield bar()
}
Почему While -loop не выполняется более одного раза, а просто повторяется? Почему существенное отличие от for-loops? Еще лучше, есть ли какая-то предполагаемая стратегия использования while-loops в выражениях вычислений?