The Binding Class

Binding - это класс, экземпляры которого (объекты привязки) инкапсулируют контекст выполнения в определенном месте кода и сохраняют этот контекст для дальнейшего использования.

Это означает, что объект привязки захватывает и сохраняет локальную область видимости, в которой он был вызван. Позже мы можем передать эти объекты привязки в качестве аргумента методу #eval, чтобы заглянуть в область видимости во время выполнения блока кода.

def foo
x = 1
binding
end

binding = foo # storing the binding object created when calling #foo into a local variable
=> #<Binding:0x007ff61480c4d0>

x # x is out of our main scope
=> NameError: undefined local variable or method `x' for main:Object #

eval("x", binding)
=> 1 # eval was able to return value of x in the scope when the #foo method was called