通常どおりに実行すると、期待どおりに動作します(結果をキャッシュします):
let help = let tmp = printfn "oh no"
1+1
fun () -> tmp
help ()
help ()
>oh no
ただし、メンバー関数として作成すると、機能しなくなります。
type test =
{ a: float }
member x.help =
let tmp = printfn "oh no"
x.a * 2.
fun () -> tmp
member x.b = x.help ()
let t = { a = 1. }
t.b
t.b
>oh no
>oh no