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的一個類方法。
對象擴展
類方法是單件方法的特例,因此可以把類擴展這種技巧應用到任意對象上,這種技巧即為對象擴展
# 法一: 打開單件類來擴展 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是在接受者的單件類中包含模塊的快鍵方式。
相關文章
Python的Flask框架中SERVER_NAME域名項的配置教程
SERVER_NAME項在Flask的路由配置中至關重要,特別是在配置絕對url和子域名的操作中,這里我們就來看一下Python的Flask框架中SERVER_NAME項的配置教程:2016-06-06Ruby使用Monkey Patch猴子補丁方式進行程序開發(fā)的示例
Monkey Patch猴子補丁是指在程序解釋運行時動態(tài)添加類或模塊的做法,這里我們就來看一下Ruby使用Monkey Patch猴子補丁方式進行程序開發(fā)的示例2016-05-05