Ruby の binding オブジェクトと eval()

Ruby では現在のスコープのコンテキストを bindig オブジェクトとして扱う事が出来ます。

def func a, b
    add = a + b

    # このメソッド内のコンテキストを返す
    binding
end

p func 1, 2
# => #<Binding:0x00000000c0fe18>

[binding オブジェクトと #eval()]

bindig の利用方法はいくつかありますが、#eval() で使用するのがわかりやすいです。

def func a, b
    add = a + b

    # このメソッド内のコンテキストを返す
    binding
end

context = func 1, 2
# eval 内で func の変数などが参照できる
p eval("add + a + b", context)
# => 6

このように eval() 内で指定した binding のコンテキストを参照する事が出来ます。