From: shugo@... (MAEDA Shugo) Date: 1998-11-27T20:43:46+09:00 Subject: [ruby-dev:3689] Re: nested method? (Re: block local variable) 前田@大阪大学です。 >>>>> In [ruby-dev:3687] >>>>> "檜田" = Kazuhiro HIWADA san wrote: 檜田> クラス単位に話をしぼります。 檜田> def foo 檜田> def bar 檜田> ... 檜田> end 檜田> bar # (1) 檜田> end 檜田> def bar 檜田> ... 檜田> end 檜田> foo 檜田> bar # (2) 檜田> (1) は『self.send("foo$bar".id), foo$barが未定義なら self.send("bar".id)』 檜田> (2) は『self.send("bar".id)』の意味 檜田> ってのを大体意図してるんでしょうか?。とすると、 fooの中のbarのメソッドIDをfoo$barにするという意図はなかったのですが、 だいたいそういうことです。 shugo> メソッド探索のコストが気になるのですが、どうなのでしょう? 檜田> メソッド foo$bar が未定義かどうかを静的にチェックできるかどうかが問題っ 檜田> てとこでしょうか。静的に解決できそうな気はしますが。 静的にというのがどういう意味かわからなかったのですが、コンパイル時に 呼び出されるメソッドを決定可能であるという意味ならば無理だと思います。 # というかそもそもRubyには静的束縛ってないですよね? 僕がいいたかったのは、 >>>>> In [ruby-dev:3685] >>>>> "松本" = Yukihiro Matsumoto san wrote: 松本> * barが有効なのはスタティックなスコープの範囲内か,それと 松本> もfooメソッド実行中はFooクラスのインスタンスで有効なのか の後者を採用するとすれば(おそらく採用されるとすればこちらだと思います)、 barというメソッドの探索時にfoo(場合によっては他の複数のメソッド)が実行中 かどうかのチェックなどが入るので、そのコストはどれくらいなんだろうという ことです。 # あと、メソッドキャッシュにも影響があるのかな。 そういえば、このモデルだと、 def foo def bar puts "foo$bar" end baz end def bar puts "bar" end def baz bar end でbazを呼び出したらどうなるんでしょう。 -- 前田 修吾 (mailto:shugo@aianet.ne.jp)