2010-02-22 48 views

回答

6

如果您事先知道需要定義哪些類,則可能應該生成明確定義它們的代碼,以便清楚地說明關鍵字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所有兒童。

+0

哇,真好!非常感謝 – marshluca 2010-02-23 04:21:09

5

在文本編輯器中使用宏或腳本可能會更好。以編程方式創建類使他們難以記錄。

+0

+1,以支持運行時生成的代碼生成。後者有時是做某事的唯一方式,但通常不是最好的方式。 – OregonGhost 2010-02-22 10:19:00

+0

+1爲清晰度超過聰明。 – 2011-09-14 16:43:16

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 
0

我覺得「元編程紅寶石」對如何避免使用class關鍵字測驗問題,但我不知道這會幫助你解決你的問題。

相關問題