Ruby元編程小結(五)

Ruby元編程小結(五)

單件方法容許給單個對象增長一個方法。singleton methods
# test.rb
str = "My name is caoqing."
def str.title?
    self.upcase == self
end

puts str.title?
puts str.methods.grep(/^title?/)
puts str.singleton_methods

result =>
false
title?
title?

類方法的本質,類是對象,類名是常量。在類上調用方法和對象調用方法同樣:
obj.my_method
Cla.class_method
Duck Typing:對象能不能響應方法,能夠是普通方法或者單件方法。
類方法的實質就是他們是類的一個單件方法。
def obj.method
    # method body
end
obj能夠是對象引用,常量類名或self。

類宏(Class Macro)
Ruby對象沒有屬性,能夠使用擬態方法定義屬性。
Module#attr_*()方法中的一員來定義訪問器。類宏不是關鍵字而是方法。

Eigenclass
單件方法按照常規的方法查找在祖先鏈沒法找到保存的地方,obj是對象不能保存,也不能存在於class內,不然全部的實例均可以共享這個方法。
對象擁有一個特有的隱藏類,稱爲該對象的eigenclass。
進入eigenclass做用域:
class << obj
    code
end
若是想獲取eigenclass的引用,則能夠在離開該做用域時返回self:
相關文章
相關標籤/搜索