使用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

results matching ""

    No results matching ""