我试图更好地理解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中实际发生的事情做一些澄清会有所帮助.