0

Object クラス (private として定義されている) でメソッドを定義した場合、別のクラス内からそれを呼び出すことができる可能性はありますか? つまり、Dog クラス内から say_hello を呼び出すと、say_hello がトップレベルで定義されたメソッドであり、したがって Object クラスに対してプライベートである場合、どのように解決されるのでしょうか? Object クラスがすべてのクラスのメソッド ルックアップにあることは知っていますが、メソッドがプライベートの場合、アクセスできないはずですよね?

def say_hello
  p "Hello"
end
class Dog
  def test_hello
    say_hello
  end
end

prova = Dog.new
prova.test_hello

私の疑問の簡単な説明は次のようになると思います: なぜ子から親のプライベートメソッドを呼び出すことができるのですか?

class Animal
  private
  def prova
    p "hello"
  end
end
class Dog < Animal
  def test_hello
    prova
  end
end

prova = Dog.new
prova.test_hello
4

2 に答える 2

0

Dogから継承し、 s メソッドObjectにアクセスできることを思い出してください。ObjectObject クラスは必要に応じて拡張できます。

次の回答を参照してください: Rails でクラス オブジェクトを拡張する方法は?

于 2013-03-18T23:18:16.080 に答える
0

しかし、メソッドがプライベートの場合、アクセスできないはずですよね?

何があなたをそう思わせたのですか?

プライベート メソッドは、暗黙的なレシーバーでのみ呼び出すことができます。暗黙のレシーバーで呼び出しています。したがって、それは機能するはずです…そして機能します。

于 2013-03-19T00:11:31.907 に答える