![](/img/trans.png)
[英]Rails 2.3.5 startup: remove_const cannot remove Object::NotSupported (NameError)
[英]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.