Oczekuję pętli while, aby zwrócić ostatnią instrukcję, którą wykonuje, ale funkcja nie wydaje tego.Ruby: dlaczego i dopóki nie zwracają ostatniej linii, są wykonywane z funkcji?
(1) To wydaje się działać ..
[10] pry(main)> counter = 0
=> 0
[11] pry(main)> a = counter+=1 while counter < 10
=> nil
[12] pry(main)> a
=> 10
(2) To nie działa jak się spodziewałem. Spodziewam się, że 10 zostanie zwrócone i przechowywane w 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
Pytania:
- Dlaczego w (1), robi
nil
się wrócił z instrukcji przypisania? - Dlaczego
b
nie zostanie przypisany10
?
Aktualizacja:
Jak wspomniano @DaveNewton w (1), myślałem, że robi:
a = (counter +=1 while counter < 10)
ale faktycznie robi:
(a = counter +=1) while counter < 10
Jesteś robić różne rzeczy. * (1) * pobiera 'nil' i wyświetla go, podobnie jak * (2) *.W * (1) * inkrementujesz zmienną lokalną, 'counter' i wyświetlasz ją. W * (2) * ustawiasz zmienną lokalną 'b' na wynik zwracający wartość' increment', która jest 'nil'. –
Wow. Dzięki @DaveNewton za tę ciekawostkę! – kubasub