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