Учитывая следующий код:F #: Oddity с ленивым evalution
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», однако второй случай печатает «foo \ nbar». Что тут происходит?
Возможно, я думаю, что мой VS2010 beta2 довольно старый: 10.0.21003.1. Кто-нибудь еще повторяет эту проблему? Если нет, я просто предполагаю, что это известная проблема с предыдущими версиями. – rysama
Да, у меня нет Beta2, но моя внутренняя сборка на работе имеет ожидаемое поведение, поэтому, похоже, это была ошибка, которая была исправлена, не уверен, что исправление еще не привело его к выпуску. – Brian
Спасибо за подтверждение – rysama