Cauzele Ruby NameError Eroare constantă inițializată

Limbajul de programare open-source Ruby este cunoscut pentru sintaxa clară și ușurința de utilizare. Asta nu înseamnă că nu veți mai întâmpina un mesaj de eroare. Una dintre cele mai infioratoare este excepția NameError Uninitialized Constant, deoarece are mai multe cauze. Sintaxa excepției urmează acest format:

NumeError: constantă neinițializată Ceva

sau

NameError: constantă inițializată Obiect :: Ceva

(unde diverse nume de clasă sunt în locul Ceva)

Ruby NameError Cauze constante neinițializate

Eroarea constantă neinițializată este o variație a unei clase de excepție regulate NameError. Are mai multe cauze posibile. 

  • Veți vedea această eroare când codul se referă la o clasă sau un modul pe care nu îl poate găsi, de multe ori, deoarece codul nu include necesita, care instruiește fișierul Ruby să încarce clasa.
  • În Ruby, variabilele / metodele încep cu litere mici, în timp ce clasele încep cu litere mari. Dacă codul nu reflectă această distincție, veți primi excepția Uninitialized Constant.
  • O altă cauză posibilă a erorii NameError este că ați făcut o scriere simplă în cod. 
  • Ruby este sensibil cu majuscule, astfel încât „TestCode” și „Testcode” sunt complet diferite. 
  • Codul conține mențiunea rubygems, care este învechit în toate versiunile vechi, cu excepția lui Ruby.

Cum să remediați eroarea

Pentru a vă depana codul, examinați-l pentru posibilele cauze enumerate mai sus pe rând. Dacă găsiți o problemă, adresați-o. De exemplu, parcurgeți codul căutând o discrepanță în utilizarea literelor mari și minuscule pentru variabile și clase. Dacă găsiți unul și îl corectați, problema dvs. este probabil rezolvată. Dacă nu este așa, continuați și celelalte cauze posibile, rezolvând pe măsură ce mergeți.

Dacă clasa la care faceți referire în cod se află într-un alt modul, consultați-o cu numele său complet astfel:

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

Despre excepțiile de rubin

Excepție fac cum Ruby îți atrage atenția asupra problemelor din cod. Când apare o eroare în cod, o excepție este „ridicată” sau „aruncată” și programul se oprește implicit.

Ruby publică o ierarhie de excepție cu clase predefinite. NameErrors se află în clasa StandardError, împreună cu RuntimeError, ThreadError, RangeError, ArgumentError și altele. Această clasă include majoritatea excepțiilor normale pe care le întâlnești în programele tipice Ruby.