如何在 F# 中重复 TryParse 直到成功?

How to repeat TryParse until success in F#?

抱歉这个愚蠢的问题,但我有点困惑。

在 C# 中,我可以惯用地执行以下操作:

int result = 0;
while (!Int32.TryParse(someString, out result))
{
    ...
}

在 F# 中,我有两个 TryDoSomething 模式选项。
要么

let (isSuccess, result) = Int32.TryParse someString

let result = ref 0
let isSuccess = Int32.TryParse("23", result)

我可以 while not Int32.TryParse("23", result) do ... 但不知道第一个变体是否可以实现同样的效果。

P.S。当然,尾递归在这里也是可行的,但我对使用 while 构造感兴趣。

你可以这样做:

while (not (fst (Int32.TryParse someString))) do
  printfn "in while loop. It's not an Int32." ;
  someString <- Console.ReadLine();

或者(如果你关心解析结果):

while 
   let (isSuccess, result) = Int32.TryParse someString in
   not isSuccess do
       printfn "in while loop. It's not an Int32 ; it is %A" result;
       someString <- Console.ReadLine();