視頻: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是調用方法鏈中的第一個同名方法。