類方法
類方法其實質是生活在該類的單件類中的單件方法。其定義方法有三種,分別是:
# 法一def MyClass.a_class_method; end# 法二class MyClass def self.anther_class_method; endend# 法三*class MyClass class << self def yet_another_class_method; end endend
其中第三種方法道出了,類方法的實質,特別記憶一下!
類擴充
類擴充通過向類的單件類中添加模組來定義類方法。
module MyModule def my_method; ‘hello'; endendclass MyClass class < self include MyModule endendMyClass.my_method
上面代碼展示了具體類擴充的實現方式,將一個MyModule模組引入到MyClass類的單件類中,因為my_method方法是MyClass的單件類的一個執行個體方法,這樣,my_method方法也是MyClass的一個類方法。
對象擴充
類方法是單件方法的特例,因此可以把類擴充這種技巧應用到任意對象上,這種技巧即為對象擴充
# 法一: 開啟單件類來擴充module MyModule def my_method; ‘hello'; endendobj = Object.newclass << obj include MyModuleendobj.my_method # => “hello”obj.singleton_methods # => [:my_method]# 法二:Object#extend方法module MyModule def my_method; ‘hello'; endendobj = Object.new#對象擴充obj.extend MyModuleobj.my_method # => “hello” #類擴充class MyClass extend MyModuleendMyClass.my_method # => “hello”
Object#extend是在接受者的單件類中包含模組的快鍵方式。