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"

コンテクストまとめ