我有一个以下代码片段,元编程创建了类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
答案 0 :(得分:1)
subclasses
不是纯Ruby的一部分,而remove_const
是。这里可能发生的是subclasses
方法是通过一个在inherited
钩子上递增的计数器实现的。但是,由于删除常量通常不是在代码库内部完成的,因此可能没有相关的减量(我不相信class_removed
有一个钩子,所以它们不能轻易地有相关的减量)
从技术上讲,你可以重写remove_const
来弄清楚要减少什么,但我认为这不值得,也不是一个聪明的举动(猴子修补核心方法总是值得怀疑的IMO )。