次のコードがあるとします。
let bar =
lazy(
printfn "bar"
())
let foo =
lazy(
printfn "foo"
bar)
インタラクティブウィンドウ(毎回リセット)で、
電話すると、次のようlet res = foo.Force ()
になります。
foo
val res : Lazy<unit> = Value is not created.
を呼び出すとfoo.Force()
、次のようになります。
foo
bar
val it : Lazy<unit> =
<ToString exception: Object reference not set to an instance of an object.>
{IsValueCreated = false;
Value = null;}
どちらの場合も、単に「foo」と出力されることを期待していましたが、2 番目のケースでは「foo\nbar」と出力されます。何が起きてる?