J'essaye de créer dynamiquement une classe en utilisant la méthode eval. Cela fonctionne bien sauf pour un petit problème. Comme le montre mon code, je crée la classe Browser dans la classe BrowserFactory. Quand je fais ceci la classe de Browser a un espace de noms ajouté de BrowserFactory. Y a-t-il moyen d'évaluer la classe Browser à partir d'une chaîne sans que l'espace de noms BrowserFactory soit attaché?créer dynamiquement une classe sans espace de noms
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
Vous pouvez réellement passer simplement le bloc de configuration pour 'Class.new' plutôt que d'appeler' class_eval' séparément. – Chuck
En effet, encore plus agréable. Merci :-) –