在 Ruby 中,procs 似乎可以访问在声明它们时存在的局部变量,即使它们在不同的范围内执行:
module Scope1
def self.scope1_method
puts "In scope1_method"
end
end
module Scope2
def self.get_proc
x = 42
Proc.new do
puts x
puts self
scope1_method
end
end
end
Scope1.instance_eval(&Scope2.get_proc)
输出:
42
Scope1
In scope1_method
这是如何以及为什么会发生的?