我是红宝石新手,我正在学习一些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
都是类。
答案 0 :(得分:3)
在第一个示例中,您在类hello_o
上定义了一个实例方法Object
,并从Object
调用它,Class
是Object
类的实例,它继承了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