gpt4 book ai didi

ruby - Lambda 行为

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:45 24 4
gpt4 key购买 nike

我很难理解是什么使以下行为成为可能(摘自 ruby 镐书):

def power_proc_generator
value = 1
lambda {value += value}
end

power_proc = power_proc_generator

3.times {puts power_proc.call} # => 2,4,8
3.times {puts power_proc_generator.call()} # => 2,2,2

我没有看到“power_proc”对象如何允许值继续加倍,因为我假设(似乎是错误的)每次调用都会将值重新分配给 1。

我的问题是为什么“3.times {puts power_proc.call}”的结果是“2,4,8”而不是“2,2,2”?

最佳答案

power_proc_generator 返回一个 lambda,它使用(并修改)周围范围内变量的值。这称为闭包——返回的函数“关闭”value 变量的值。因此,每次调用返回的函数时,它都会将 value 乘以二。重要的部分是 valuepower_proc.call 调用之间保持不变,因此您正在修改现有变量。

此外,详细说明打印 power_proc_generatorpower_proc.call 之间的区别 -- power_proc_generator 每次调用时都会返回一个新函数,这就是为什么您永远不会看到 value 增加的原因。另一方面,power_proc.call 继续多次调用同一个函数。

关于ruby - Lambda 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13849414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com