F#:具有惰性评估的奇怪性
给定以下代码:F#:具有惰性评估的奇怪性,f#,lazy-evaluation,f#-interactive,F#,Lazy Evaluation,F# Interactive,给定以下代码: 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”,而
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”,而第二种情况下打印“foo\nbar”。这是怎么回事?你有什么版本的F#?这听起来可能像是一个被修复的bug;当FSI打印Lazy类型的值时,您有什么版本的F#?这听起来可能像是一个被修复的bug;当FSI打印Lazy类型的值时,问题似乎是实现细节。惰性引用如何知道何时计算了值?也许当它的引用不是() 拥有一个类型
Lazy
没有多大意义。试一试
let bar =
lazy(
printfn "bar"
42)
问题似乎在于实现细节。惰性引用如何知道何时计算了值?也许当它的引用不是() 拥有一个类型
Lazy
没有多大意义。试一试
let bar =
lazy(
printfn "bar"
42)
可能是这样,我认为我的VS2010 beta2已经很老了:10.0.21003.1。还有其他人对这个问题进行重新解释吗?如果没有,我就假设这是以前版本的一个已知问题是的,我手头没有Beta2,但我的内部构建具有预期的行为,因此这似乎是一个已经修复的bug,不确定修复是否已经发布。我在Beta2中也有上述行为。我还应该添加“foo.Force()|>ignore”将打印“foo”和返回类型unitIt可能是,我认为我的VS2010 beta2非常旧:10.0.21003.1。还有其他人对这个问题进行重新解释吗?如果没有,我就假设这是以前版本的一个已知问题是的,我手头没有Beta2,但我的内部构建具有预期的行为,因此这似乎是一个已经修复的bug,不确定修复是否已经发布。我在Beta2中也有上述行为。我还应该添加“foo.Force()|>ignore“将打印“foo”并返回类型单位