2017-06-17 1 views
2

J'essaie d'instancier toutes les classes du répertoire scenes et de les ajouter à mon tableau de scènes. Jusqu'à présent, le code semble fonctionner, mais j'ai une étrange erreur rgexp -ct que je ne trouve pas de réponses en ligne. Voici mon codeInstanciation de la classe et push to array Ruby

class Game 
    @scenes = [] 

    def initialize 
     Dir[File.dirname(__FILE__)+"/scenes/*.rb"].each do |file| 
      require_relative file 
      @scenes << eval("#{file.gsub(".rb", "")}.new()") 
     end 
    end 
end 

Et voici à quoi ressemble une scène dans le répertoire. Je peux les exiger et voir les noms de fichiers très bien.

class Scene99 
    @number = 99 
    @text = "This is the first scene." 
    @next_scene = 0 

    def initialize 
     puts "WORKS" 
    end 
end 

est ici l'erreur de syntaxe à propos regexp que je reçois, ce n'apparaît que lorsque je tente de lancer le eval (...

/Users/icetimux/projects/death-at-appledore-towers/lib/death-at-appledore-towers/game.rb:8:in `eval': (eval):1: unknown regexp options - ct (SyntaxError) 
     from /Users/icetimux/projects/death-at-appledore-towers/lib/death-at-appledore-towers/game.rb:8:in `block in initialize' 
     from /Users/icetimux/projects/death-at-appledore-towers/lib/death-at-appledore-towers/game.rb:6:in `each' 
     from /Users/icetimux/projects/death-at-appledore-towers/lib/death-at-appledore-towers/game.rb:6:in `initialize' 
     from death-at-appledore-towers.rb:3:in `new' 
     from death-at-appledore-towers.rb:3:in `<main>' 
+0

'/ scenes/*' peut être le coupable. Le '*' est une option regex invalide. –

Répondre

3

Essayez cette approche:

@scenes << file.split("/").last.gsub(".rb", "").camelize.constantize.new 

ou eval:

@scenes << eval("#{file.split("/").last.gsub(".rb", "").camelize}.new") 

Im en supposant que le fichier est une chaîne comme './scenes/scene99.rb' et que vous avez besoin pour obtenir un tableau d'objets scènes.

1

Eh bien, si vous avez un fichier nommé, disons, ct.rb , alors file seront /scenes/ct.rb, et vous eval

/scenes/ct.new() 

qui est une Regexp illégale littérale, il est le même que

(/scenes/ct).new() 

Honnêtement, je ne sais pas ce que le code est même supposé faire, donc je ne peux pas offrir une solution, mais c'est le problème. Vous supposez aveuglément que n'importe quel nom de fichier sera une combinaison d'indicateurs Regexp valides (tels que x ou m).

+0

D'OH! comment pourrais-je regarder ça. J'essaie d'instancier toutes les classes dans un répertoire et de les ajouter à un tableau. Consultez la réponse acceptée. – IceTimux