From: Masakazu Takahashi Date: 2010-09-19T20:43:02+09:00 Subject: [ruby-list:47454] Re: 変数の変更を監視するには? 2010/9/18 Masaomi Hatakeyama : > ある変数(オブジェクト)を監視して変更があった場合に通知するような > イベントリスナーのようなものでいつ変数が変更されたか知れたらいいな、 > と思ったのですが、パッとアイデアが浮かびません。  たとえばこういうコードがあったとします。 def foo x = 10 100.times do |i| x = i if i % 30 == 0 end end  このとき、こういうのを実行しておきます。いろいろ乱暴なコードですが。 old_v = Object.new # `==' 的にユニークな値 set_trace_func proc {|event, file, line, id, binding, klass, *rest| if event == 'line' || event == 'return' begin v = eval('x', binding) puts "#{file}:#{line}: x=#{v.inspect}" if old_v != (old_v = v) rescue NameError end end }  そのうえで、元のコードを呼び出してみます。 foo  すると、こういう感じで出力されます。 sample.rb:2: x=nil sample.rb:3: x=10 sample.rb:4: x=0 sample.rb:4: x=30 sample.rb:4: x=60 sample.rb:4: x=90  以上、デバッガの中身を元に。 -- Masakazu Takahashi (emasaka)