Orsaker till Ruby NameError Uninitialized Constant Error

Det öppna källkodsprogrammet Ruby är känt för sin tydliga syntax och användarvänlighet. Det betyder inte att du inte ibland kommer att stöta på ett felmeddelande. En av de mest irriterande är undantag för NameError Uninitialized Constant eftersom det har mer än en orsak. Syntaxen för undantaget följer detta format:

NameError: uninitialized constant Något

eller

NameError: uninitialized constant Object :: Något

(där olika klassnamn finns i stället för Något)

Ruby NameError Oinitialiserade konstant orsaker

Det oinitialiserade konstantfelet är en variant av en vanlig undantagsklass för NameError. Det har flera möjliga orsaker. 

  • Detta fel visas när koden hänvisar till en klass eller modul som den inte kan hitta, ofta för att koden inte innehåller fordra, som instruerar Ruby-filen att ladda klassen.
  • I Ruby börjar variabler / metoder med små bokstäver, medan klasser börjar med stora bokstäver. Om koden inte återspeglar denna åtskillnad får du undantaget Uninitialized Constant.
  • Ytterligare en annan möjlig orsak till felet NameError är att du har gjort en enkel skrivfel i koden. 
  • Ruby är skiftlägeskänsligt, så "TestCode" och "Testcode" är helt annorlunda. 
  • Koden innehåller omnämnande av RubyGems, vilket avskrivs i alla utom gamla versioner av Ruby.

Hur du åtgärdar felet

Om du vill felsöka din kod ska du granska den för eventuella orsaker som anges ovan en åt gången. Om du hittar ett problem, adressera det. Gå till exempel igenom koden och letar efter en skillnad i stora och små bokstäver på variabler och klasser. Om du hittar en och rättar till det är problemet troligt löst. Om det inte är det, fortsätt med de andra möjliga orsakerna, fixa som du går.

Om klassen du hänvisar till i koden finns i en annan modul, hänvisar du till den med dess fulla namn som denna:

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

Om Ruby-undantag

Undantag är hur Ruby uppmärksammar problem i koden. När ett fel i koden uppstår "undviks" eller "kastas" undantag och programmet stängs av som standard.

Ruby publicerar ett undantagshierarki med fördefinierade klasser. NameErrors finns i klassen StandardError tillsammans med RuntimeError, ThreadError, RangeError, ArgumentError och andra. Denna klass innehåller de flesta vanliga undantag som du stöter på i typiska Ruby-program.