相关疑难解决方法(0)

了解Ruby闭包

我试图更好地理解Ruby闭包,我遇到了这个我不太明白的示例代码:

def make_counter
  n = 0
  return Proc.new { n = n + 1 }
end

c = make_counter
puts c.call # => this outputs 1
puts c.call # => this outputs 2
Run Code Online (Sandbox Code Playgroud)

当有人打电话时,有人可以帮我理解上面代码中究竟发生了什么c = make_counter吗?在我看来,这就是我的想法:

Ruby调用该make_counter方法并返回一个Proc对象,其中与Proc关联的代码块将在其中{ n = 1 }.c.call执行第一个时,Proc对象将执行与之关联的块,然后返回n = 1.但是,当第二个c.call执行时,Proc对象是否仍然执行与之关联的块,这仍然是{ n = 1 }?我不明白为什么输出会变为2.

也许我根本就不理解这一点,如果你能对Ruby中实际发生的事情做一些澄清会有所帮助.

ruby closures

3
推荐指数
1
解决办法
1838
查看次数

标签 统计

closures ×1

ruby ×1