Tôi mong đợi một vòng lặp while để trả lại câu lệnh cuối cùng nó thực thi, nhưng một hàm dường như không trả về điều đó.Ruby: tại sao làm trong khi và cho đến khi không trở lại dòng cuối cùng họ thực hiện từ một chức năng?
(1) Điều này dường như làm việc ..
[10] pry(main)> counter = 0
=> 0
[11] pry(main)> a = counter+=1 while counter < 10
=> nil
[12] pry(main)> a
=> 10
(2) này không làm việc như tôi mong đợi. Tôi mong đợi 10 được trả lại và lưu trữ vào 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
Câu hỏi:
- Tại sao, trong (1), không
nil
có được trả lại từ báo cáo kết quả chuyển nhượng? - Tại sao
b
không được chỉ định10
?
Cập nhật:
Như @DaveNewton đã đề cập, trong (1), tôi nghĩ rằng tôi đã thực hiện:
a = (counter +=1 while counter < 10)
nhưng tôi đã thực sự làm:
(a = counter +=1) while counter < 10
Bạn làm những việc khác nhau. * (1) * nhận một 'nil' và hiển thị nó, do đó, * (2) *.Trong * (1) * bạn đang tăng một biến cục bộ, 'counter', và hiển thị nó. Trong * (2) * bạn đặt một biến cục bộ 'b' thành kết quả trả về gọi' increment', là 'nil'. –
Rất tiếc. Cảm ơn @DaveNewton cho miếng ngon đó! – kubasub