Run*_*ine 2 continuations f# currying
为什么这会先打印"DIV/0",然后再打印"2"?
let printZero = printfn "DIV/0"
let printSuccess x = printfn "%d" x
let div ifZero success x y =
if y = 0
then ifZero
else x / y |> success
let printDiv = div printZero printSuccess
printDiv 8 4
printDiv 10 0
Run Code Online (Sandbox Code Playgroud)
printfn "DIV/0"将立即写入控制台,返回unit.所以这一行:
let printZero = printfn "DIV/0"
Run Code Online (Sandbox Code Playgroud)
...将立即写入DIV/0并绑定unit该值printZero.稍后当您使用div函数调用时y = 0,您只需返回该值.
你想要的是printZero成为一个功能.由于该函数不需要任何值作为输入,你也可以unit在这里使用(表示为()) - 所以你有一个类型的函数unit -> unit:
let printZero() = printfn "DIV/0"
let printSuccess x = printfn "%d" x
let div ifZero success x y =
if y = 0
then ifZero()
else x / y |> success
Run Code Online (Sandbox Code Playgroud)