From: Endo Akira Date: 2010-09-20T04:33:45+09:00 Subject: [ruby-list:47456] Re: 変数の変更を監視するには? 遠藤と申します。 私もset_trace_func というのに初めてお目にかかりました。 で、set_trace_funcのprocが呼ばれる度に何で呼ばれたかを puts "#{file}:#{line}: #{event}" で出力すると、@var=nilなどの出力がどういうタイミングで出て きたかが分かります。 > test.rb:21: @var=nil > test.rb:6: @var=100 > test.rb:23: @var=nil > test.rb:3: @var=100 最初の@var=nilが出てくるのは、TEST.newのTESTが評価 された時のようです。トップレベルの@varが出力されています。 2番目も意外で、6行目で評価されるのは数値の100ですので、 この時にはまだ@varはnilで出力されません。その次のeventで あるset_varからのreturnのところで評価されて@var=100となり ます。 3番目は、testが評価されたタイミングでトップレベルですので @varはnil。ここでprocの中のvもnilにセットされます。 したがって、get_varで評価するタイミングでの@varの値が出力 されてしまう、というわけです。 procで@varの変化を追うのをプログラムの1行目から8行目に 限定すればTESTの中での@varの変化が追えるということになります。 感動しました。