如何在Ruby中定义没有'class'语句的类?

时间:2010-02-22 08:59:21

标签: ruby class

我要定义很多类,但我不想重复以下工作:

class A < ActiveRecord::Base
end

是否有声明语句来定义不使用class语句的类?

4 个答案:

答案 0 :(得分:7)

如果您事先知道需要定义哪些类,那么为了清楚起见,您应该生成使用class关键字明确定义它们的代码。

但是,如果您确实需要动态定义它们,则可以将Object.const_setClass.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关键字的测验问题,但我不确定这是否会帮助您解决问题。