Errore inatteso di keyword_end, tuttavia la syntax sembra corretta

Questa funzione dovrebbe estrarre i nomi da un file Valori separati da virgola e inserirli in una matrice.

def xprt_csv_to_ary(csv_file) namecatcher_regex = "/^[\.{1}]([AZ]+)\.{3}/" # Matches up to char before next name current_word = 0 names_array = [] while current_word < 5000 if current_word == 0 name = csv_file.readline.match(namecatched_regex) else name = csv_file.past_match.match(namecatcher_regex) end names_array[current_word] = name current_word ++ end return names_array end 

Sto ottenendo il seguente errore:

 syntax error, unexpected keyword_end 

Sarei felice di fare riferimento a una domanda esistente che risolve il mio problema, in modo che qualcuno mi risponda direttamente.

Il tuo errore deriva dalla linea:

 current_word ++ 

Non c’è una tale syntax in Ruby. Dovrebbe essere:

 current_word += 1 

Inoltre, crei le tue espressioni regolari in modo errato. Dovrebbe essere:

 namecatcher_regex = /^[\.{1}]([AZ]+)\.{3}/ 

Potrebbero esserci altri errori che non ho notato.

Su questa linea:

 current_word ++ 

Stai dicendo a Ruby di aggiungere qualcosa a current_word , ma non dici mai cosa aggiungere, ma c’è una end direttamente nella riga successiva. Manca l’operando a unario + . Dovrebbe essere qualcosa di simile

 current_word + something_else 

o

 current_word + +something_else 

In Ruby, lo spazio bianco è consentito attorno agli operatori, quindi

 a + b # equivalent to a + b, which is equivalent to a.+(b) 

e persino

 + a # equivalent to +a, which is equivalent to [email protected]() 

è perfettamente a posto, quindi se unisci i due, lo ottieni

 a + + b # equivalent to a + +b, which is equivalent to a.+([email protected]()) 

è anche perfettamente a posto, e dal momento che lo spazio attorno agli operandi è perfetto ma opzionale,

 a+b 

e

 a ++ b # equivalent to a + +b as above 

è anche perfettamente bene.

È per questo che si ottiene l’errore solo sulla riga successiva con la end , perché solo in questo caso Ruby può dire che manca l’operando all’operatore + prefisso unario.