[#47414] <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp>

そえじま@勉強中です。

37 messages 2010/09/17
[#47420] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/17

 他の方がすでに解答されているみたいですが、一応僕なりの答えを書いてみます。僕もRuby初心者なのではっきりとは言えないんですが・・・。

[#47422] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47424] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

信岡です。

[#47426] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47428] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

そえじまさん

[#47429] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47433] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/18

GyRCISE/JyE5SlZFeiQ3JD8kJCRIO1ckJCReJDckPyQsISI7fjRWJCxMNSQkJE4kRyFWGyhCT09Q

[#47435] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/18

そえじま@勉強中です。

[#47438] Re: <=>の意味は? — masayoshi takahashi <maki@...> 2010/09/18

高橋征義です。『たのしいRuby』の著者の片割れの方から来ました。

[ruby-list:47472] Re: 変数の変更を監視するには?

From: masa <masap.hat@...>
Date: 2010-09-21 19:52:31 UTC
List: ruby-list #47472
信岡さん、解説ありがとうございました。

理解できてすっきりしました。どうもです。

> イベント発生箇所の変数スコープで変数 @var を評価して、

なるほど

>     v = eval('@var', binding)

この @var を調べる eval 自体がトップレベルの @var を作ってしまって
評価してしまっていた、というわけですね。

ちょっと実用的に作り変えてみました。
# そのコンテキストのレシーバを保存するようにしました。

def trace_local_var(var)
  old_var = {}
  set_trace_func lambda {|event, file, line, id, binding, klass, *rest|
    if event == 'line' || event == 'return'
      begin
        receiver = eval('self',binding)
        v = eval(var, binding)
        puts "#{file}:#{line}: #{receiver}.#{var}=#{v.inspect}" if
old_var[receiver] != (old_var[receiver] = v)
      rescue NameError
      end
    end
  }
end

これを以下に適用すると
(TEST クラスは以前のまま)

trace_local_var('@var')

test = TEST.new
test.set
test.get

test2 = TEST.new
test2.set
test2.get

次のようになります。

test.rb:7: #<TEST:0x2605c>.@var=100
test.rb:7: #<TEST:0x24fcc>.@var=100

masa

In This Thread

Prev Next