2010-05-07 4 views
0

donné ce code:Ruby Parse pour

class Foo 
    def bar 
    return Bar.new 
    end 
end 

class Bar 
    ... 
end 

je reçois cette erreur:

NameError: uninitialized constant Bar 

Cela fonctionne évidemment si je mets Bar avant Foo, mais ce n'est pas une vraie solution bien.

Des idées sur la façon de résoudre ce problème sans tenir compte de la commande?

Merci beaucoup.

MISE À JOUR:

Bien sûr, l'erreur ne se produit que lors de l'appel Foo.new.bar et non lors de la définition.

+5

Cela ne me donne pas cette erreur. Bien sûr, vous ne pouvez pas appeler 'Foo.new.bar' avant de définir Bar, mais la définition de la méthode devrait fonctionner correctement. –

+0

Oui, vous avez raison. C'est ce que je mets réellement –

Répondre

3

Il doit y avoir quelque chose de mal avec votre installation de Ruby. Il ne devrait pas donner ce message d'erreur. J'ai vérifié avec la spécification ISO Ruby et le RubySpec et j'ai également copié & collé le code que vous avez posté dans JRuby 1.6.0.dev, JRuby 1.5.0RC3, IronRuby 1.0, YARV 1.9.1-p378, MRI 1.8.7-p249, Rubinius 0.11.0-dév, YARV-1.9.1-p129, IRM 1.8.7-p174, IRM 1.8.6-p369, IRM 1.7.1, IRM 1.6.0, IRM 1.5.0, IRM 1.4.0, IRM 1.3, MRI 1.2 et même IRM 1.0 (remontant à 1997) et je n'ai pas eu cette erreur:

class Foo 
    def bar 
    return Bar.new 
    end 
end 

class Bar 
end 

puts Foo.new.bar # => #<Bar:0x823f638> 
+0

+1 pour l'exhaustivité des environnements de test – pilcrow

+0

Vous avez absolument raison. Je ne peux pas reproduire l'erreur maintenant après avoir apporté quelques modifications à mon code. Mais j'étais convaincu que cela était dû à l'ordre défini, car je pensais avoir connu le même problème il y a quelque temps. Ma faute ... pour ne pas enquêter plus avant de poster. –