Ruby面向?qū)ο缶幊讨蓄惖姆椒ㄅc類的擴展
類方法
類方法其實質(zhì)是生活在該類的單件類中的單件方法。其定義方法有三種,分別是:
# 法一 def MyClass.a_class_method; end # 法二 class MyClass def self.anther_class_method; end end # 法三* class MyClass class << self def yet_another_class_method; end end end
其中第三種方法道出了,類方法的實質(zhì),特別記憶一下!
類擴展
類擴展通過向類的單件類中添加模塊來定義類方法。
module MyModule def my_method; ‘hello'; end end class MyClass class < self include MyModule end end MyClass.my_method
上面代碼展示了具體類擴展的實現(xiàn)方式,將一個MyModule模塊引入到MyClass類的單件類中,因為my_method方法是MyClass的單件類的一個實例方法,這樣,my_method方法也是MyClass的一個類方法。
對象擴展
類方法是單件方法的特例,因此可以把類擴展這種技巧應(yīng)用到任意對象上,這種技巧即為對象擴展
# 法一: 打開單件類來擴展 module MyModule def my_method; ‘hello'; end end obj = Object.new class << obj include MyModule end obj.my_method # => “hello” obj.singleton_methods # => [:my_method] # 法二:Object#extend方法 module MyModule def my_method; ‘hello'; end end obj = Object.new #對象擴展 obj.extend MyModule obj.my_method # => “hello” #類擴展 class MyClass extend MyModule end MyClass.my_method # => “hello”
Object#extend是在接受者的單件類中包含模塊的快鍵方式。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信