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:
相关文章
相关标签/搜索