Ruby面向?qū)ο缶幊讨蓄惖姆椒ㄅc類的擴(kuò)展
類方法
類方法其實(shí)質(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
其中第三種方法道出了,類方法的實(shí)質(zhì),特別記憶一下!
類擴(kuò)展
類擴(kuò)展通過向類的單件類中添加模塊來定義類方法。
module MyModule def my_method; ‘hello'; end end class MyClass class < self include MyModule end end MyClass.my_method
上面代碼展示了具體類擴(kuò)展的實(shí)現(xiàn)方式,將一個(gè)MyModule模塊引入到MyClass類的單件類中,因?yàn)閙y_method方法是MyClass的單件類的一個(gè)實(shí)例方法,這樣,my_method方法也是MyClass的一個(gè)類方法。
對(duì)象擴(kuò)展
類方法是單件方法的特例,因此可以把類擴(kuò)展這種技巧應(yīng)用到任意對(duì)象上,這種技巧即為對(duì)象擴(kuò)展
# 法一: 打開單件類來擴(kuò)展 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 #對(duì)象擴(kuò)展 obj.extend MyModule obj.my_method # => “hello” #類擴(kuò)展 class MyClass extend MyModule end MyClass.my_method # => “hello”
Object#extend是在接受者的單件類中包含模塊的快鍵方式。
相關(guān)文章
Python的Flask框架中SERVER_NAME域名項(xiàng)的配置教程
SERVER_NAME項(xiàng)在Flask的路由配置中至關(guān)重要,特別是在配置絕對(duì)url和子域名的操作中,這里我們就來看一下Python的Flask框架中SERVER_NAME項(xiàng)的配置教程:2016-06-06Ruby配置rspec和RestClient來檢測(cè)服務(wù)器
這篇文章主要介紹了Ruby配置rspec和RestClient來檢測(cè)服務(wù)器的方法,包括JSON文件的相關(guān)配置,需要的朋友可以參考下2015-07-07Ruby使用Monkey Patch猴子補(bǔ)丁方式進(jìn)行程序開發(fā)的示例
Monkey Patch猴子補(bǔ)丁是指在程序解釋運(yùn)行時(shí)動(dòng)態(tài)添加類或模塊的做法,這里我們就來看一下Ruby使用Monkey Patch猴子補(bǔ)丁方式進(jìn)行程序開發(fā)的示例2016-05-05