读书笔记《Ruby On Rails中文版》第13章

本章知识点
13.1 单例类
1 定义方法
a class<<obj
def twice
b def str.twice
c def class<<self
a,b用于既定义类的实例的单例方法,可用于定义类对象的单例方法,c用于定义类对象的单例方法。
2 单例类加入模块
a class << obj
include M
b obj.extend(M)
3 类方法是为Class类的对象定义的单例方法,但是类方法有特别的地方:在为对象定义单例方法时,没有其他对象可以作为该方法调用的接收者;为类对象定义的单例方法可以被该类的子类调用。

13.2 eval 方法族
instance_eval 常常用于访问对象的私有变量
class_eval 可以进入类定义体中,
a 在类定义的上下文对字符串求值
b 为匿名类(但不包含单例类)打开类定义
c 获取外围类作用域中变量的访问权
define_method 暗示着一个扁平化得局部变量作用域,而不是像通用的class和def那样打开新的作用域。

13.3 可调对象
1 Proc 对象
作为闭包的Proc对象
pr = Proc.new{|*x| p x}
pr.call(1,2)
2 lamba
lam = lambda {puts "A lambda!"}
lambda中的return从lambda 返回,而Proc中的return从外围方法返回
3 将Proc对象或lambda转换为一个代码块 前面加一个 &
4 作为对象的方法
1
c = C.new
meth = c.method(:talk)
meth.call
unbound = meth.unbind
unbound.bind(d).call
2
unbound =C.instance_method(:talk)
13.4 回调方法和钩子方法
1 method_missing
2 Module#include 添加模块方法为类方法
Module M
def self.included(c1)
def c.a_class_method
puts "Now the class has a new class method"
end
end
end
3 Class#inherited
4 Module#const_missing
13.5 覆盖核心功能
alias :old_match :match
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章