抱歉愚蠢的问题,但我有点困惑。
在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
构造感兴趣。
答案 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();