2019-08-05
x_evalしたときのコンテクスト(続)
前回 x_eval メソッドでのコンテクストについて、self と klass という側面からまとめた。*1
今回はローカル変数の状態という側面を加えて、x_eval/x_exec メソッドでのコンテクストについておさらいする。
x_eval/x_exec 実行時のローカル変数の状態
単純な話で、ローカル変数の状態は呼び出し元のまま。
class Sample; end
sample = Sample.new
var = "top level"
# eval系メソッド
Sample.class_eval("p var") # => "top level"
Sample.class_eval{ p var } # => "top level"
Sample.instance_eval("p var") # => "top level"
Sample.instance_eval{ p var } # => "top level"
sample.instance_eval("p var") # => "top level"
sample.instance_eval{ p var } # => "top level"
# exec系メソッド
Sample.class_exec{ p var } # => "top level"
Sample.instance_exec{ p var } # => "top level"
sample.instance_exec{ p var } # => "top level"