From: take_tk Date: 2008-08-07T03:05:07+09:00 Subject: [ruby-list:45308] Re: グローバルにdefしたメソッドのスコープ たけ(tk)です。 [ruby-list:45307] Re: グローバルにdefしたメソッドのスコープ にて take_tk さん 曰く: > (6)なので、トップレベルのメソッドBからトップレベルの別のメソッドCを > 呼び出すように書いてあっても、呼び出したメソッドAのクラスαやその上位ク > ラス(Objectにいたる前の上位クラス)に同名のメソッドがある場合には、トッ > プレベルのメソッドCは呼び出されれないことになる。 # 中間のクラスに barメソッドがあった場合の例 def bar(e,f) "global bar(#{e},#{f})" end def hello(c,d) p self #=> # # hello が baz から呼ばれたときの self は # bar(c,d) #=> hello が baz から呼ばれたときには # Baz の上位クラスの Foo.bar を呼び出す。 end class Foo def bar(i,j) "Foo.bar(#{i},#{j})" end end class Baz < Foo def baz hello(3,4) end end p Baz.new.baz # => "Foo#bar(3,4)" これって気がつきにくいかも。中間クラスが別のファイルになっていたりすると、 なんでこうなるのか分からないかもね。 結論としては、「トップレベルで作った関数のご利用は控えめに」ということか も。 take_tk = kumagai hidetake