如何定义没有';类别';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表示支持代码生成而不是运行时生成。后者有时是做某事的唯一方式,但通常不是最好的方式。