视频:https://eggman.tv/players/ruby-buildin-class-design
一、在ruby中,一切都是对象。当你定义了一个类,这个类名在ruby中就变成一个Class类的实例。
首先我们知道,所有实例都有class方法,返回这个实例的类。
A # 没定义A类前调用,报错 NameError: uninitialized constant A
class A
end
a = A.new
a.class # => A
A.class # => Class
说明当我们定义了A
类,A
就成了一个实例
二、Class的父类是Module,Class实例有一个superclass方法,返回这个类的父类
Class.superclass # => Module,表示Class的父类是Module
A.superclass # => Object, 表示A的父类是Object
三、先看一段代码
module B
def hi
p "hi from B"
end
end
class A
def hi
super
p "hi from A"
end
end
a = A.new
a.hi # => hi from B \n hi from A
a.ancestors # => [A, B, Object, Kernel, BasicObject](下面把这个数组称为方法链)
在其他语言中,一般我们认为super就是调用父类同名方法。在ruby我们可以这样认为,super是调用方法链中的第一个同名方法。