[#45318] Windows コマンドプロンプトで UTF-8を出力するには — Yuumi Yoshida <yuumi3@...>

おつかれさまです、 Yuumi3です。

11 messages 2008/08/08

[ruby-list:45308] Re: グローバルにdefしたメソッドのスコープ

From: take_tk <ggb03124@...>
Date: 2008-08-06 18:05:07 UTC
List: ruby-list #45308
たけ(tk)です。

[ruby-list:45307] Re: グローバルにdefしたメソッドのスコープ にて 
take_tk <ggb03124@nifty.com> さん 曰く:

> (6)なので、トップレベルのメソッドBからトップレベルの別のメソッドCを
> 呼び出すように書いてあっても、呼び出したメソッドAのクラスαやその上位ク
> ラス(Objectにいたる前の上位クラス)に同名のメソッドがある場合には、トッ
> プレベルのメソッドCは呼び出されれないことになる。

# 中間のクラスに barメソッドがあった場合の例

def bar(e,f)
  "global bar(#{e},#{f})"
end

def hello(c,d)
  p self      #=> #<Baz:0x13222c8> 
              # hello が baz から呼ばれたときの self は #<Baz:0x13222c8>
  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

In This Thread