我已經建立了兩個類如下圖所示紅寶石繼承和重寫類方法
class Parent
def self.inherited(child)
child.custom_class_method
end
def self.custom_class_method
raise "You haven't implemented me yet!"
end
end
class Child < Parent
def self.custom_class_method
"hello world"
end
end
看來,當的傳承Child < Parent
評估,它調用self.inherited
,這又引發了self.custom_class_method
的Parent
的版本而不是Child
的。這是因爲,而不是讓問題預期"hello world"
我得到一個錯誤募說"You haven't implemented me yet!"
不Child
的,直到後self.custom_class_method
沒有得到評估Parent
的self.inherited
完成評估?如果是的話,那麼可能是圍繞這個做了一個工作?我是不是應該在父類上放一個raise
檢查?
這似乎很奇怪。獲得父類的'custom_class_method'的唯一方法應該是調用'super'。否則,只調用'Child.custom_class_method'應該會導致您的「hello world」輸出。你能否提供更深入的日誌記錄? –
嗯,我同意它應該!但似乎我可以通過將代碼塊複製粘貼到「irb」控制檯來複制此內容。由於這個原因,評估「Child」類時會出錯。 – aMat