вопрос о наследовании класса и метода - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующий код, и я пытаюсь понять, почему я не могу получить [: hoge], вместо этого я получаю пустой ответ.Может ли кто-нибудь помочь мне понять, почему это так?

class Foo
  def self.fuga
     pp Foo.public_instance_methods(false)
  end
end

class Bar < Foo
  fuga

   def hoge
    p "fuga"
   end
end

Bar.fuga
=> []

1 Ответ

0 голосов
/ 01 марта 2019

Вы получаете пустой массив, потому что на Foo.public_instance_methods вы вызываете public_instance_methods на Foo, а Foo не имеет общедоступных методов экземпляра (только Bar делает).

Если выизмените эту строку на self.public_instance_methods, она будет работать, как и ожидалось.

class Foo
  def self.fuga
    pp self.public_instance_methods(false)
  end
end

class Bar < Foo
  fuga

  def hoge
    p "fuga"
  end
end

Bar.fuga
#=> [:hoge]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...