我想動態地使用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
實際上,你可以只通過安裝塊無需EVAL,順便說一句,你可以,如果你要定義的類方法to_s 'Class.new',而不是單獨調用'class_eval'。 – Chuck 2009-12-22 16:06:55
確實,更好。謝謝 :-) – 2009-12-22 16:27:49