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

时间:2015-12-29 12:55:37

标签: while-loop f# tryparse

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

在C#中,我可以惯用法做以下事情:

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

在F#中,我有两种选择Try DoSomething 模式 它要么是

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构造感兴趣。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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();