Я просто столкнулся с изменением в поведении между каркасными версиями при компиляции этот кусок кода в F #:Почему поведение Lazy.CreateFromValue изменилось в F # между версиями платформы .NET?
let test = Lazy.CreateFromValue 1
Составитель против .NET Framework 2.0, результаты экспрессии в качестве «уже созданного» Ленивый объекта, то есть:
test.IsValueCreated = true
При компиляции с .NET Framework 4.0, результаты выражения в "невычисленном" ленивом объекте, то есть:
test.IsValueCreated = false
Только после доступа к test.Value в последнем случае эти два эквивалента.
Я никак не мог найти ссылку на это изменение, поэтому мой вопрос в том, почему это ведет себя по-разному и какова была причина изменения (это нарушение). По-моему, поведение в .NET 2.0 имеет больше смысла - создание Lazy-объекта из конкретного значения должно привести к «уже оцененному» ленивому объекту.
Если это уже оценено, вряд ли можно сказать, что его оценили лениво ... –
@MarkSeemann Да, но в .NET 2 это не лениво оценивается, поэтому я вижу, почему возникает какая-то путаница. Более того, fsharp.core делает странный материал в .NET 2, чтобы он выглядел как ленивый, но он не ленив. –