Если вы определяете метод 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 в выражениях вычислений?