Mi aspetto un ciclo while per restituire l'ultima istruzione eseguita, ma una funzione non sembra restituirla.Ruby: perché fare mentre e fino a non tornare l'ultima riga che eseguono da una funzione?
(1) Questo sembra funzionare ..
[10] pry(main)> counter = 0
=> 0
[11] pry(main)> a = counter+=1 while counter < 10
=> nil
[12] pry(main)> a
=> 10
(2) Questo non funziona come mi aspettavo. Mi aspetto che 10 vengano restituiti e archiviati in b
.
[19] pry(main)> def increment(terminal_value)
[19] pry(main)* counter = 0
[19] pry(main)* while counter < terminal_value
[19] pry(main)* counter+=1
[19] pry(main)* end
[19] pry(main)* end
=> :increment
[20] pry(main)> b = increment(10)
=> nil
[21] pry(main)> b
=> nil
Domande:
- Perché, in (1), fa
nil
ottenere tornato da l'istruzione di assegnazione? - Perché non viene assegnato
10
?
Aggiornamento:
Come accennato @DaveNewton, in (1), ho pensato che stavo facendo:
a = (counter +=1 while counter < 10)
ma in realtà stavo facendo:
(a = counter +=1) while counter < 10
Sei fare cose diverse. * (1) * ottiene un 'nil' e lo visualizza, così fa * (2) *.In * (1) * stai incrementando una variabile locale, 'counter', e mostrandola. In * (2) * si imposta una variabile locale 'b' sul risultato di ritorno della chiamata' increment', che è 'nil'. –
Wow. Grazie a @DaveNewton per quel bocconcino! – kubasub