我要定义很多类,但我不想重复以下工作:
class A < ActiveRecord::Base
end
是否有声明语句来定义不使用class
语句的类?
答案 0 :(得分:7)
如果您事先知道需要定义哪些类,那么为了清楚起见,您应该生成使用class
关键字明确定义它们的代码。
但是,如果您确实需要动态定义它们,则可以将Object.const_set
与Class.new
结合使用。要定义几个ActiveRecord::Base
的子类:
%w{A B C D}.each do |name|
Object.const_set name, Class.new(ActiveRecord::Base)
end
以上结果是四个名为A..D
的新班级,ActiveRecord::Base
的所有孩子。
答案 1 :(得分:5)
使用文本编辑器中的宏或脚本可能会更好。以编程方式创建类使得难以记录。
答案 2 :(得分:3)
您可以完全动态定义类:
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
答案 3 :(得分:0)
我认为“Metaprogramming ruby”有关于如何避免使用class
关键字的测验问题,但我不确定这是否会帮助您解决问题。