Oorzaken van Ruby NameError Uninitialized Constant Error

De open-source programmeertaal Ruby staat bekend om zijn duidelijke syntaxis en gebruiksgemak. Dat betekent niet dat je niet af en toe een foutmelding tegenkomt. Een van de meest irritante is de uitzondering NameError Uninitialized Constant omdat deze meer dan één oorzaak heeft. De syntaxis van de uitzondering volgt dit formaat:

NameError: niet-geïnitialiseerde constante Something

of

NameError: niet-geïnitialiseerde constante Object :: Something

(waar verschillende klassennamen in plaats van staan Iets)

Ruby NameError Niet-geïnitialiseerde constante oorzaken

De fout Uninitialized Constant is een variatie op een reguliere uitzonderingsklasse NameError. Het heeft verschillende mogelijke oorzaken. 

  • U ziet deze fout wanneer de code verwijst naar een klasse of module die deze niet kan vinden, vaak omdat de code geen inhoud bevat vereisen, die het Ruby-bestand instrueert om de klasse te laden.
  • In Ruby beginnen variabelen / methoden met kleine letters, terwijl klassen beginnen met hoofdletters. Als de code dit onderscheid niet weerspiegelt, ontvangt u de uitzondering Uninitialized Constant.
  • Nog een andere mogelijke oorzaak voor de NameError-fout is dat je een eenvoudige typefout in de code hebt gemaakt. 
  • Ruby is hoofdlettergevoelig, dus "TestCode" en "Testcode" zijn totaal verschillend. 
  • De code bevat vermelding van rubygems, die is verouderd in alle oude versies van Ruby.

Hoe de fout op te lossen

Als u problemen met uw code wilt oplossen, onderzoekt u deze een voor een voor de hierboven genoemde mogelijke oorzaken. Als u een probleem vindt, kunt u dit oplossen. Doorloop bijvoorbeeld de code op zoek naar een verschil in hoofd- en kleine letters bij variabelen en klassen. Als u er een vindt en deze corrigeert, is uw probleem waarschijnlijk opgelost. Als dit niet het geval is, gaat u door met de andere mogelijke oorzaken en lost u dit op.

Als de klasse waarnaar u in de code verwijst zich in een andere module bevindt, moet u ernaar verwijzen met de volledige naam als volgt:

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

Over Ruby-uitzonderingen

Uitzonderingen zijn hoe Ruby uw aandacht vestigt op problemen in de code. Wanneer een fout in de code wordt aangetroffen, wordt een uitzondering "opgeworpen" of "gegooid" en wordt het programma standaard afgesloten.

Ruby publiceert een uitzonderingshiërarchie met vooraf gedefinieerde klassen. NameErrors behoren tot de klasse StandardError, samen met RuntimeError, ThreadError, RangeError, ArgumentError en andere. Deze klasse bevat de meeste normale uitzonderingen die u tegenkomt in typische Ruby-programma's.