【发布时间】:2020-06-29 11:06:00
【问题描述】:
使用 .NET 惰性运算符代替普通函数有什么好处吗?
例如:
let x = lazy ...
let y = lazy (1 + x.Value)
let x = (fun () -> ...)
let y = (fun () -> 1 + x())
【问题讨论】:
标签: f# lazy-evaluation
使用 .NET 惰性运算符代替普通函数有什么好处吗?
例如:
let x = lazy ...
let y = lazy (1 + x.Value)
let x = (fun () -> ...)
let y = (fun () -> 1 + x())
【问题讨论】:
标签: f# lazy-evaluation
惰性值和函数之间的区别在于惰性值只计算一次。然后它会缓存结果并再次访问它不会重新计算该值。每次调用时都会评估一个函数。
这对性能有影响,当您有副作用时也很重要。例如,以下代码只打印一次"calculating x":
let x = lazy (printfn "calculating x"; 1)
let y = lazy (1 + x.Value)
y.Value + y.Value
以下打印"calculating x" 两次:
let x = (fun () -> printfn "calculating x"; 1)
let y = (fun () -> 1 + x())
y () + y ()
【讨论】: