无需eval即可动态创建Ruby类
我需要动态地创建一个Ruby类,它派生自无需eval即可动态创建Ruby类,ruby,metaprogramming,eval,Ruby,Metaprogramming,Eval,我需要动态地创建一个Ruby类,它派生自ActiveRecord::Base。我暂时使用eval: eval %Q{ class ::#{klass} < ActiveRecord::Base self.table_name = "#{table_name}" end } eval%Q{ 类::#{klass}
ActiveRecord::Base
。我暂时使用eval
:
eval %Q{
class ::#{klass} < ActiveRecord::Base
self.table_name = "#{table_name}"
end
}
eval%Q{
类::#{klass}
有没有一种不使用eval
的等效且至少同样简洁的方法可以做到这一点?当然有:)
class-Foo
“酒吧”类
您可以使用类,其中类是实例。困惑了吗?;)
就是这个,谢谢。我知道类也是对象;但我不知道可以将基类作为参数,特别是关于块的参数(事后看来,我应该猜到)。
class Foo
class << self
attr_accessor :table_name
end
end
Bar = Class.new(Foo) do
self.table_name = 'bars'
end
Bar.table_name # => "bars"
cls = Class.new(ActiveRecord::Base) do
self.table_name = table_name
end
cls.new