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