Ruby 的 include 和 included
Ruby 提供了混入(Mixin)的方式使用模塊(Module),它可以讓被混入的模塊中的代碼被其他類或者模塊使用。
本章節(jié)我們將講解其中一種混入方式:include
。
1. include
include
將會把模塊里的方法包含進被執(zhí)行的類的實例方法中。
實例:
module Person
def name
"My name is Andrew"
end
end
class Member
include Person
end
puts Member.new.name
# ---- 輸出結果 ----
My name is Andrew
解釋:當類Member
包含了模塊Person
之后,類Member
增加了一個名為name
的實例方法(類實例后可調用的方法)。
2. included
當我們include
了一個模塊后,模塊被包含后會調用一個鉤子方法,這個方法名為included
。
讓我們?yōu)槟KPerson
增加一個鉤子方法。
實例:
module Person
def self.included(klass)
puts "#{klass} included #{self}"
end
def name
"My name is Andrew"
end
end
class Member
include Person
end
puts Member.new.name
# ---- 輸出結果 ----
Member included Person
My name is Andrew
解釋:當模塊Person
被包含后,觸發(fā)了included
鉤子方法,打印了“Member included Person”。
3. 小結
本章節(jié)我們學習了include
,當類include
一個模塊的時候,會將模塊中定義的方法填充進類的實例方法中,另外,當一個模塊被include
的時候,會觸發(fā)included
回調,并返回操作的類名。