Uninitialized Constant (NameError)

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.

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.

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.

prova cosi :slight_smile:

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 :slight_smile:

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?

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.

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 :slight_smile:

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 :slight_smile:
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.