刚刚偶然发现 ruby 闭包的一个问题,我的代码简化后如下,
i=0
[:f1,:f2].each do|f|
define_method(f) do
j = i
p j
end
i += 10
end
我想让 f1 和 f2 两个方法使用环境中的变量 i,期待的结果是这样的:
f1 #=> 0
f2 #=> 10
真正的结果却是这样的:
f1 #=> 10
f2 #=> 10
莫非这意味着定义 f1,f2 这两个方法时使用的块共享了堆中同一片变量空间(其中包含变量 j)? 有没有深入了解 ruby 解释器的伙伴解释解释呗~如果我想达到我要的结果,有没有好的写法?