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 のコンテキストを参照する事が出来ます。