Ich erwarte, dass eine while-Schleife die letzte Anweisung zurückgibt, die sie ausführt, aber eine Funktion scheint das nicht zurückzugeben.Ruby: warum tun while und bis nicht die letzte Zeile, die sie von einer Funktion ausführen?
(1) Dieses ..
[10] pry(main)> counter = 0
=> 0
[11] pry(main)> a = counter+=1 while counter < 10
=> nil
[12] pry(main)> a
=> 10
(2) Das funktioniert nicht, wie ich es erwartet zu funktionieren scheint. Ich erwarte, dass 10 zurückgegeben und in b
gespeichert wird.
[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
Fragen:
- Warum, in (1), tut
nil
aus der Zuweisungsanweisung zurückerhalten? - Warum wird
b
nicht zugewiesen10
?
Update:
Wie @DaveNewton erwähnt, in (1), dachte ich, ich tat:
a = (counter +=1 while counter < 10)
aber ich war tatsächlich tun:
(a = counter +=1) while counter < 10
Du bist verschiedene Dinge tun. * (1) * erhält ein 'nil' und zeigt es an, ebenso * (2) *.In * (1) * erhöhen Sie eine lokale Variable "counter" und zeigen sie an. In * (2) * setzen Sie eine lokale Variable "b" auf das Rückgabeergebnis von "increment", was "nil" ist. –
Wow. Danke @DaveNewton für diesen Leckerbissen! – kubasub