Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > module Kernel > trace_var

module function 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 を返します。

[PARAM] varname:
グローバル変数名を文字列か Symbol で指定します。
[PARAM] hook:
フックになる文字列または Proc オブジェクトです。
[RETURN]
フックを登録した場合は 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