Causes de l'erreur constante non initialisée de Ruby NameError

Le langage de programmation open source Ruby est connu pour sa syntaxe claire et sa facilité d'utilisation. Cela ne signifie pas que vous ne rencontrerez pas occasionnellement un message d'erreur. L'une des plus contrariantes est l'exception de constante non initialisée NameError car elle a plusieurs causes. La syntaxe de l'exception suit ce format:

NameError: constante non initialisée Quelque chose

ou

NameError: Constante non initialisée Object :: Something

(où divers noms de classe sont à la place de Quelque chose)

Ruby NameError Causes constantes non initialisées

L'erreur constante non initialisée est une variante d'une classe d'exception NameError régulière. Il a plusieurs causes possibles. 

  • Vous verrez cette erreur lorsque le code fait référence à une classe ou un module qu'il ne trouve pas, souvent parce que le code ne comprend pas exiger, qui demande au fichier Ruby de charger la classe.
  • Dans Ruby, les variables / méthodes commencent par des lettres minuscules, tandis que les classes commencent par des lettres majuscules. Si le code ne reflète pas cette distinction, vous recevrez l'exception Constante non initialisée.
  • Une autre cause possible de l'erreur NameError est que vous avez fait une simple faute de frappe dans le code. 
  • Ruby est sensible à la casse, donc "TestCode" et "Testcode" sont complètement différents. 
  • Le code contient la mention de rubygems, qui est déconseillé dans toutes les versions de Ruby sauf les anciennes.

Comment réparer l'erreur

Pour dépanner votre code, examinez-le pour les causes possibles répertoriées ci-dessus une à la fois. Si vous rencontrez un problème, résolvez-le. Par exemple, parcourez le code à la recherche d'une différence dans l'utilisation des majuscules et des minuscules sur les variables et les classes. Si vous en trouvez un et le corrigez, votre problème est probablement résolu. Si ce n'est pas le cas, continuez à travers les autres causes possibles, corrigeant au fur et à mesure.

Si la classe à laquelle vous faites référence dans le code se trouve dans un autre module, faites-lui référence avec son nom complet comme ceci:

#! / usr / bin / env rubymodule MyModule class MyClass; endendc = MyModule :: MyClass.new

À propos des exceptions Ruby

Les exceptions sont la façon dont Ruby attire votre attention sur les problèmes du code. Lorsqu'une erreur dans le code est rencontrée, une exception est "levée" ou "levée" et le programme s'arrête par défaut.

Ruby publie une hiérarchie d'exceptions avec des classes prédéfinies. NameErrors sont dans la classe StandardError, avec RuntimeError, ThreadError, RangeError, ArgumentError et autres. Cette classe comprend la plupart des exceptions normales que vous rencontrez dans les programmes Ruby typiques.