【问题标题】:Lazy<'T> vs anonymous functionsLazy<'T> 与匿名函数
【发布时间】: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


    【解决方案1】:

    惰性值和函数之间的区别在于惰性值只计算一次。然后它会缓存结果并再次访问它不会重新计算该值。每次调用时都会评估一个函数。

    这对性能有影响,当您有副作用时也很重要。例如,以下代码只打印一次"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 ()
    

    【讨论】:

    • 假设所有调用都只需要一次,懒惰会影响性能吗?
    • @alakfq 我认为这不会有任何明显的伤害,但如果性能对你来说真的很重要,那么总是要衡量这些事情!
    猜你喜欢
    • 2011-12-29
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多