Techioz Blog

Rubyのクラスでインスタンスメソッドを呼び出す

概要

これについては非常に混乱しています。 『プログラミングRuby』の本にはこう書かれています。 「受信側は自身のクラス内のメソッド定義をチェックします」

したがって、クラスオブジェクトにはすべてのインスタンスメソッドが格納されます。じゃあなぜ電話できないのか クラス内からのインスタンスメソッド?

例えば:

class ExampleClass
  def example_method    
  end
  example_method
end

ExampleClass 内で example_method を呼び出すことができません。

ただし、次のようにトップレベルでメソッドを定義すると:

class ExampleClass
  def example_method
  end
end

def example_method1
end

example_method1

次に、トップレベルのメソッド example_method1 を呼び出すことができます。

トップレベルもクラスじゃないの?どうしてそれは違うのですか ExampleClass 内からインスタンス メソッドを呼び出しますか?

解決策

あなたが書いた方法でその関数を呼び出すことができない最大の理由は、あなたが言うように、それがインスタンスメソッドであることです。

次のように定義してみてください。

class ExampleClass
  def self.class_method
    puts "I'm a class method"
  end
  class_method
end

違う結果が得られることがお分かりいただけると思います。それが「トップレベル」であるということではなく、扱っているものの範囲内にあるかどうかです。クラスを扱うので、クラスメソッドが必要になります。オブジェクト (インスタンス化されたクラス) を扱っている場合、それは別の「スコープ」になります。