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)文章
Ruby on Rails實(shí)現(xiàn)最基本的用戶注冊(cè)和登錄功能的教程
這里我們主要以has_secure_password的用戶密碼驗(yàn)證功能為中心,來講解Ruby on Rails實(shí)現(xiàn)最基本的用戶注冊(cè)和登錄功能的教程,需要的朋友可以參考下2016-06-06
淺談Rails 4 中Strong Parameters機(jī)制
本文主要是通過Rails3中的Parameters與Rails4中新引入的Strong Parameters機(jī)制進(jìn)行對(duì)比,從而得出他們直接的異同2014-06-06
ruby實(shí)現(xiàn)網(wǎng)頁(yè)圖片抓取
本文給大家分享的是個(gè)人使用ruby編寫的抓取網(wǎng)頁(yè)圖片的代碼,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-06-06
Ruby on Rails中的ActiveResource使用詳解
這篇文章主要介紹了Ruby on Rails中的ActiveResource使用詳解,主要用于HTTP和請(qǐng)求響應(yīng)相關(guān)功能,需要的朋友可以參考下2015-08-08

