# Uninitialized Constant (NameError)

**URL:** <https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332>\
**Category:** IT\
**Created:** [September 19, 2015, 12:02am UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332 "2015-09-19T00:02:32Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafa\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/958977/32.png) [@Rafa\_F](https://www.ruby-forum.com/u/Rafa_F)\
**Post date:** [September 19, 2015, 12:02am UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/1 "2015-09-19T00:02:32Z")

</div>

Salve a tutti. Da poco ho deciso di voler entrare nel mondo della  
programmazione e pertanto sono stato indirizzato su Ruby come linguaggio  
un po’ più semplice, rispetto a Java o C, e professionale allo stesso  
tempo.  
Sono alle prime armi e ho dei problemi con il gets.chomp. Non nel  
capirlo, il concetto è chiaro, ma ricevo continui errori solo e  
solamente su questo argomento.

Ho scritto questo codice:

puts ‘Ehilà, come ti chiami?’  
nome = gets.chomp  
Adriano  
puts 'Ti chiami ’ + nome + ‘? Ma che bello :)’  
puts 'Piacere di conoscerti ’ + nome + ‘.’

Tuttavia, quando vado ad aprirlo nella linea di comando ricevo tale  
errore:

Ehilà, come ti chiami?

C:/Users/EV/Programming +/boom.rb:3in ‘’: uninitialized constant  
Adriano (NameError)

E’ chiaro che il problema sia “Adriano” ma non capisco il perchè. Se  
provo un copia incolla da notepad++ su ruby il codice funziona.  
Grazie mille in anticipo.

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 20, 2015, 11:18pm UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/2 "2015-09-20T23:18:52Z")

</div>

Ho l’impressione che tu abbia scritto Adriano nel codice del programma.  
Invece va inserito da tastiera quando il programma si fermerà alla gets.

Quando lo copi dentro a irb funziona perché lì le righe vengono lette  
una per volta e allora Adriano si mischia ai comandi Ruby.

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 21, 2015, 9:05pm UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/3 "2015-09-21T21:05:23Z")

</div>

Paolo M. wrote in post #1178866:

> Invece va inserito da tastiera quando il programma si fermerà alla gets.

Perdonami, ma continuo a non capire.  
Come dovrei risolvere quindi?  
Sul codice come posso far in modo che ‘Adriano’ venga scritto quando non  
posso scriverlo in esso? Questa parte sul gets mi sta facendo  
scervellare.  
Scusa ancora per il disturbo e grazie in anticipo.

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 22, 2015, 10:48am UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/4 "2015-09-22T10:48:50Z")

</div>

prova cosi 🙂

puts ‘Ehilà, come ti chiami?’  
nome = gets.chomp  
puts 'Ti chiami ’ + nome + ‘? Ma che bello :)’  
puts 'Piacere di conoscerti ’ + nome + ‘.’

salva il file chomp.rb \> passi al terminale \>poi dai il comando$ ruby  
percorso/file

La prossima volta scrivi anche gli errori, in ogni caso  
dimmi se funziona 🙂

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 22, 2015, 5:39pm UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/5 "2015-09-22T17:39:08Z")

</div>

Così funziona di sicuro. E’ fondamentale capire come funziona la gets  
perché con vari nomi è presente in tutti i linguaggi di programmazione:  
il programma si ferma in attesa di una stringa inserita da terminale. Il  
return termina la stringa.

Quando inserisci quelle righe una a una in irb vedi questo:

$ irb  
2.2.2 :001 \> puts ‘Ehilà, come ti chiami?’  
Ehilà, come ti chiami?  
=\> nil  
2.2.2 :002 \> nome = gets.chomp

e qui non appare il prompt 2.2.2 :003 \> proprio perché il programma è in  
attesa di input. Quando scrivi Adriano e premi return vedrai

=\> “Adriano”  
2.2.2 :003 \>

e adesso in nome c’è Adriano. Di solito non si usa la gets in  
interattivo perché si fa prima a scrivere nome = “Adriano”

Quando facevi copia e incolla dentro a irb copiavi sia il programma che  
il suo input, da qui il malinteso che Adriano fosse un comando del  
programma.

Tutto chiaro?

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 22, 2015, 9:03pm UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/6 "2015-09-22T21:03:25Z")

</div>

Paolo M. wrote in post #1178878:

> Tutto chiaro?

Ahimè, no. Credo sia unico nel mio genere a non capire qualcosa di base  
sul programming purtroppo.  
Tornando a noi.. come ho risposto sopra se copio ed incollo il codice  
sul notepad tale e quale il risultato è che poi al “nome = gets.chomp”  
mi viene dato “” ossia nulla.

In irb ho capito come funziona, ossia dopo il nome= gets.chomp premo  
return e inserisco ad esempio “ciao” cosicche nome = ciao.  
Per far si che ciò accada da un codice invece? Mi scuso sin da ora per  
essere cosi insistente/cocciuto ma non riesco proprio a capirlo.

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 22, 2015, 9:20pm UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/7 "2015-09-22T21:20:33Z")

</div>

Paolo M. wrote in post #1178878:  
Quando scrivi Adriano e premi return vedrai

> =\> “Adriano”  
> 2.2.2 :003 \>

> Tutto chiaro?

Rettifico, ho capito. Grazie mille ad entrambi 🙂

---

<div class="post-metadata">

**Author:** ![mdx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/dec6dc/32.png) [@mdx](https://www.ruby-forum.com/u/mdx)\
**Post date:** [September 22, 2015, 8:57pm UTC](https://www.ruby-forum.com/t/uninitialized-constant-nameerror/243332/8 "2015-09-22T20:57:55Z")

</div>

Xx Xx wrote in post #1178874:

> salva il file chomp.rb \> passi al terminale \>poi dai il comando$ ruby  
> percorso/file

Ho riscontrato 2 errori nel fare quanto mi hai detto.  
Dopo aver salvato il file come chomp.rb, apro ruby e dopo aver scritto  
$ruby chomp.rb ricevo tale errore:  
SyntaxError: (irb):6: syntax error, unexpected tIDENTIFIER, expecting  
end-of-input

L’altro errore è sempre per il gets.  
Ho copiato ed incollato il tuo codice sul mio notepad e dopo averlo  
salvato come chomp.rb l’ho aperto con il prompt dei comandi ed il  
risultato è questo:  
Ehilà come ti chiami?

Ti chiami ? Ma che bello 🙂  
Piacere di conoscerti .

Quello che non capisco è come, appunto, questo codice possa funzionare  
se al gets.chomp non posso dare un nome. Il mio problema è capire come,  
per esempio, inserire la parola Adriano al posto di tutto il nome=  
gets.chomp.  
Probabilmente è ciò che hai cercato di spiegarmi, ma tutto ciò mi  
risulta ancora poco chiaro.
