当在类定义中撤销一个方法时,自定义类和ruby保留类之间的区别是什么,比如`Class`或`Object`

时间:2013-11-13 08:58:56

标签: ruby class

我是红宝石新手,我正在学习一些ruby的基本知识,比如类继承。

我写了一些片段来加深我的理解,但是轰鸣声2的片段让我非常困惑。

class Object
  def hello_o
    puts "Hello in Object"
  end

  hello_o
end

这一次打印“Hello in Object”,而

class A
  def hello_a
    puts "Hello in A"
  end

  hello_a
end

这个给我一个错误:

undefined local variable or method hello_a' for A:Class

为什么呢?我认为AObject都是类。

2 个答案:

答案 0 :(得分:3)

在第一个示例中,您在类hello_o上定义了一个实例方法Object,并从Object调用它,ClassObject类的实例,它继承了hello_a课程,所以它有效。

在第二个示例中,您定义了类A的实例方法A,并尝试从Class调用它,A是{{1}}类的实例,它没有继承{{1}}类,所以它失败了。

答案 1 :(得分:1)

您正在向Object类动态添加方法,该类是对象层次结构的根。因此,任何子类Object(隐含地是一切)都可以使用该方法。这就是为什么你可以在课堂定义中调用它。

class Object
  def hello_o
    puts "Hello in Object"
  end

  hello_o
end

class A
end

A.hello_o    # this will work