如何定义没有';类别';Ruby中的语句?
我有很多类要定义,但我不想重复以下工作:如何定义没有';类别';Ruby中的语句?,ruby,class,Ruby,Class,我有很多类要定义,但我不想重复以下工作: class A < ActiveRecord::Base end class A
class A < ActiveRecord::Base
end
class A
是否有任何声明语句可以在不使用
class
语句的情况下定义类?如果您事先确切知道需要定义哪些类,那么您可能应该生成代码,使用class
关键字显式定义这些类,以便更清晰
但是,如果您确实需要动态定义它们,则可以结合使用。要定义ActiveRecord::Base
的两个子类:
%w{A B C D}.each do |name|
Object.const_set name, Class.new(ActiveRecord::Base)
end
上面的结果是四个名为
A..D
的新类,它们都是ActiveRecord::Base
的子类。在文本编辑器中使用宏或脚本可能更好。以编程方式创建类使其难以记录。您可以定义完全动态的类:
A = Class.new(ActiveRecord::Base) do
# this block is evaluated in the new class' context, so you can:
# - call class methods like #has_many
# - define methods using #define_method
end
我认为“元编程ruby”有一个关于如何避免使用
class
关键字的问答题,但我不确定这是否能帮助您解决问题。+1表示支持代码生成而不是运行时生成。后者有时是做某事的唯一方式,但通常不是最好的方式。