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