【发布时间】:2009-12-22 09:39:48
【问题描述】:
我正在尝试使用 eval 方法动态创建一个类。除了一个小问题外,它工作正常。正如我的代码所示,我正在 BrowserFactory 类中创建 Browser 类。当我这样做时,Browser 类添加了 BrowserFactory 命名空间。是否可以在没有附加 BrowserFactory 命名空间的情况下从字符串评估 Browser 类?
class BrowserFactory
def self.create_browser(browser)
super_class = nil
case browser
when 'IE'
require 'watir'
super_class = 'Watir::IE'
when 'celerity'
require 'celerity'
super_class = 'Celerity::Browser'
end
raise StandardError.new("Browser '#{browser}' is not currentlys supported") if super_class.nil?
eval <<EOS
class Browser < #{super_class}
include Singleton
include BrowserModification
end
EOS
return Browser.instance
end
end
【问题讨论】:
标签: ruby metaprogramming eval