class Binding

Binding 的对象封装了代码中特定位置的执行上下文,并保留该上下文以供将来使用。在此上下文中可访问的变量、方法、self 的值以及可能的迭代器块都会被保留。Binding 对象可以通过 Kernel#binding 创建,并可用于 Kernel#set_trace_func 的回调以及 TracePoint 的实例。

这些绑定对象可以作为 Kernel#eval 方法的第二个参数传递,从而为求值建立一个环境。

class Demo
  def initialize(n)
    @secret = n
  end
  def get_binding
    binding
  end
end

k1 = Demo.new(99)
b1 = k1.get_binding
k2 = Demo.new(-3)
b2 = k2.get_binding

eval("@secret", b1)   #=> 99
eval("@secret", b2)   #=> -3
eval("@secret")       #=> nil

Binding 对象没有特定于类的任何方法。