我有很多類來定義,但我不希望重複以下工作:如何在Ruby中沒有'class'語句來定義一個類?
class A < ActiveRecord::Base
end
是否有任何聲明語句來定義一個類,而無需使用class
聲明?
我有很多類來定義,但我不希望重複以下工作:如何在Ruby中沒有'class'語句來定義一個類?
class A < ActiveRecord::Base
end
是否有任何聲明語句來定義一個類,而無需使用class
聲明?
如果您事先知道需要定義哪些類,則可能應該生成明確定義它們的代碼,以便清楚地說明關鍵字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,以支持運行時生成的代碼生成。後者有時是做某事的唯一方式,但通常不是最好的方式。 – OregonGhost 2010-02-22 10:19:00
+1爲清晰度超過聰明。 – 2011-09-14 16:43:16
您可以定義類完全動態:
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
我覺得「元編程紅寶石」對如何避免使用class
關鍵字測驗問題,但我不知道這會幫助你解決你的問題。
哇,真好!非常感謝 – marshluca 2010-02-23 04:21:09