2

我是ruby新手,正在学习一些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

为什么?我认为两者A兼而有之Object

4

2 回答 2

3

hello_o在第一个示例中,您在 class 上定义了一个实例方法Object,并从中调用它Object,它是 class 的一个实例Class,它继承了Objectclass,所以它起作用了。

在您的第二个示例中,您定义了hello_aclass的实例方法A,并尝试从中调用它A,这是Classclass 的实例,它不继承Aclass,因此失败。

于 2013-11-13T09:04:20.333 回答
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
于 2013-11-13T09:09:43.673 回答