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:


你可能感兴趣的:(Ruby元编程小结(五))