有关类和方法继承的问题

时间:2019-03-01 11:33:37

标签: ruby class

我有以下代码,我试图理解为什么我无法获得[: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 :(得分:2)

您得到一个空数组,因为在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]