所以我遇到了这种情况,我想以编程方式定义一堆类。我在下面使用的方法工作正常,除了我从这里继承的第 3 方类不喜欢该类是匿名定义的事实(基本上,它没有它需要的信息,即.类名,在“继承”钩子中,在我有机会将匿名类设置为常量之前)。
['one', 'two', 'three'].each do |model|
cls = Class.new(ThirdPartyClass) do
define_method :model do
model
end
end
ThirdPartyClass.const_set(model.capitalize, cls)
end
我可以简单地使用 eval 并定义类,例如:
['one', 'two', 'three'].each do |model|
eval "class ThirdPartyClass::#{model.capitalize} < ThirdPartyClass; ...; end"
end
但我不喜欢它,因为它是混乱的字符串插值。从美学上讲,基于块的方法似乎“更好”。
有什么方法可以使用基于块的语法非匿名地定义该类(即从一开始就有一个名称),还是我注定要留在 eval 混乱的字符串输入领域?