我正在閱讀Sandi Metz的POODR並遇到了一個我不太明白的編碼原則。以下是代碼:有人可以幫助解釋創建類的post_initialize回調(Sandi Metz)
class Bicycle
attr_reader :size, :chain, :tire_size
def initialize(args = {})
@size = args[:size] || 1
@chain = args[:chain] || 2
@tire_size = args[:tire_size] || 3
post_initialize(args)
end
end
class MountainBike < Bicycle
attr_reader :front_shock, :rear_shock
def post_initialize(args)
@front_shock = args[:front_shock]
@rear_shock = args[:rear_shock]
end
end
mb = MountainBike.new(front_shock: 4, rear_shock: 5)
puts mb.size
puts mb.chain
puts mb.tire_size
puts mb.front_shock
puts mb.rear_shock
此代碼將輸出1,2,3,4,5
作爲其各自的屬性。我不明白的是查找方法。
當山地自行車被實例化時,由於它沒有自己的initialize
方法,它將沿着方法查找鏈遍歷其超類(Bicycle
)。但是現在,從那裏開始,似乎Bicycle又回到了MountainBike的post_initialize方法。而不是繼續進行方法鏈,它怎麼會退縮? post_initialize
是一個像initialize
這樣的紅寶石關鍵字,因爲它提供某種特殊功能?是否有一些其他的紅寶石內省方法可以用來查看發生了什麼?
謝謝你基思先生。我只是想補充一下,使其明確清楚 - 「自我」是隱式接收者,並且由於實例是派生類,因此自身就是派生類實例,然後可以訪問存在於其中的相關方法那個特定的派生類(按照約旦的答案)。 – BKSpurgeon