讀書筆記《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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章