如何在 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();
抱歉这个愚蠢的问题,但我有点困惑。
在 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();