Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > module Kernel > trace_var
trace_var(varname, hook) -> nil
trace_var(varname) {|new_val| .... } -> nil
trace_var(varname, hook) -> [String|Proc]
グローバル変数 varname への代入のフックを登録します。
ここでの「グローバル変数」は、 [[unknown:特殊変数|組み込み変数]]も含めた `$' で始まる変数のことです。
この呼び出し以降、varname で指定したグローバル変数に 値が代入されるたびに hook かブロックが評価されます。hook が Proc オブジェクトの場合 代入された値がブロック引数に渡されます。文字列の場合はRubyコードとして評価されます。
trace_var がフックするのは明示的な代入だけです。 フックは複数登録できます。
フックを解除するには、hook に nil を 指定するか、Kernel.#untrace_var を用います。
hook が nil ならば、設定されていた hook をすべて解除してその配列を返します(ブロックで登録されていれば Proc オブジェクトで返されます) それ以外は、nil を返します。
trace_var(:$v){|val| puts "hook: $v=#{val.inspect}" } $v = 1 #=> hook: $v=1 $v = "foo" #=> hook: $v="foo" $v.upcase! p $v #=> "FOO"
[SEE_ALSO] Kernel.#untrace_var