簡體   English   中英

使用remove_const刪除類定義后,Rails動態重載Class.subclasses

[英]Rails Dynamic Reloading Class.subclasses after removing class definitions with remove_const

我有以下摘錄,元編程創建了Vehicle類的子類:

class Vehicle; end

klazz = Class.new(Vehicle)
Object.const_set('Car', klazz)

這里沒什么好看的。 如我所料, Vehicle.subclasses將返回我[Car]數組。

接下來,我使用以下命令刪除了Car定義類:

Object.send(:remove_const, :Car)

令我驚訝的是,這些subclasses沒有動態重新加載,如下所示:

Vehicle.subclassess.count == 1

我很想知道如何重新加載子類,或者我使用remove_const的方式是否錯誤。 TIA

subclasses不是純Ruby的一部分,而remove_const是。 這里可能發生的情況是, subclasses方法是通過一個在inherited鈎子上遞增的計數器實現的。 但是,由於刪除常量通常不是在代碼庫內部完成的,因此可能不存在相關的減量(我不相信class_removed有鈎子,因此它們不能輕易具有相關的減量)。

從技術上講,您可以重寫remove_const來確定要減少的內容,但我認為這不值得,也不是明智的做法(猴子修補核心方法始終是可疑的IMO)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM