我为"if"表达式测试了一些简单的F#代码,但结果对我来说意外:
> let test c a b = if c then a else b;;
val test : bool -> 'a -> 'a -> 'a
Run Code Online (Sandbox Code Playgroud)
然而
> test true (printfn "a") (printfn "b");;
a
b
val it : unit = ()
Run Code Online (Sandbox Code Playgroud)
我希望只打印出"a",但在这里我得到了"a"和"b".我想知道为什么会出现这种情况?谢谢!
郝是对的.你必须将这些表达式包装在函数中以使它们变得懒惰.试试这个.
let test c a b = if c then a() else b();;
test true (fun () -> printfn "a") (fun () -> printfn "b");;
Run Code Online (Sandbox Code Playgroud)