可以从Ruby中的另一个类访问顶级方法吗?

时间:2013-03-18 23:08:26

标签: ruby

如果我在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

2 个答案:

答案 0 :(得分:0)

请记住Dog继承自Object,使其可以访问Object方法。您可以随意扩展Object类。

请参阅答案:How to extend class Object in Rails?

答案 1 :(得分:0)

  

但如果该方法是私有的,那么它应该是不可访问的?

是什么让你这么想?

只能使用隐式接收器调用私有方法。你 用隐式接收器调用它。它应该有效......而且确实如此。