【问题标题】:Top-level method can be accessed from another class in Ruby?可以从 Ruby 中的另一个类访问顶级方法吗?
【发布时间】:2013-03-07 11:43:14
【问题描述】:

如果我在 Object 类(定义为私有)中定义一个方法,我怎么可能从另一个类中调用它?我的意思是,当我从 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

【问题讨论】:

    标签: ruby


    【解决方案1】:

    记住Dog 继承自Object,使其可以访问Objects 方法。您可以随心所欲地扩展 Object 类。

    查看回复:How to extend class Object in Rails?

    【讨论】:

    • 我不知道在 Ruby 中,扩展类可以访问其父类的私有方法...
    【解决方案2】:

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

    是什么让你这么想?

    只能使用隐式接收器调用私有方法。您正在使用隐式接收器调用它。因此,它应该可以工作……而且确实可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 2015-04-23
      • 2012-06-03
      • 2020-03-19
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多