使用Kernel#binding方法获取局部绑定的值
#典型代码示例
def get_binding(param)
y = 11
binding
end
b = get_binding("hello")
b.eval("param") #=> "hello"
b.eval("y") #=>11
#Binding通过创建绑定对象来捕获并带走当前的作用域,通过Kernel#binding方法进行实现
class MyClass
def my_method
@x = 1
binding
end
end
#b就是就是返回的绑定对象,因为方法my_method返回了binding方法,就是返回了绑定对象。
b = MyClass.new.my_method
#eval传递一个Binding对象作为额外的参数,代码就可以在这个Binding对象所携带的作用域中执行
eval ("@x", b) #=>1
#Ruby还提供了TOPLEVEL_BINDING的预定义常量,它表示顶级作用域的Binding对象:
class AnotherClass
def my_method
eval("self", TOPLEVEL_BINDING )
end
end
puts AnotherClass.new.my_method #=>main