gpt4 book ai didi

ruby - 动态创建一个没有命名空间的类

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:37 24 4
gpt4 key购买 nike

我正在尝试使用 eval 方法动态创建一个类。除了一个小问题外,它工作正常。正如我的代码所示,我正在 BrowserFactory 类中创建 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

最佳答案

定义浏览器(或::Browser,直接回答您的问题)将防止您多次调用您的工厂。

我建议使用匿名类。不需要 eval,顺便说一句,如果你想,你可以定义类方法 to_s:

class BrowserFactory
def self.create_browser(browser)
super_class = case browser
when 'IE'
require 'watir'
Watir::IE
when 'celerity'
require 'celerity'
Celerity::Browser
else
raise StandardError.new("Browser '#{browser}' is not currentlys supported")
end

klass = Class.new(super_class) do
include Singleton
include BrowserModification
def self.to_s
"Modified#{superclass}"
end
end
klass.instance
end
end

关于ruby - 动态创建一个没有命名空间的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1945238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com