tôi không thực sự có được sản lượng mà một trong hai, vì vậy chúng ta hãy phân tích nó, bắt đầu với biểu hiện trong cùng:
puts 4
# 4 <- this should denote output
#=> nil <- this should denote return value
It in 4
và trả nil
(puts
luôn trả nil
).
gói nó trong 3.times { ... }
in 4
3 lần:
3.times { puts 4 }
# 4
# 4
# 4
#=> 3
Nhưng thay vì trả lại nil
, nó sẽ trả 3
. Điều này là do times
luôn trả về người nhận (tức là số nguyên bạn gọi times
).
Bây giờ chúng ta hãy thêm puts
khác:
puts 3.times { puts 4 }
# 4
# 4
# 4
# 3
#=> nil
Tương tự như trên, nhưng cũng in kết quả của 3.times { ... }
, ví dụ: 3
.
Bao bì tất cả mọi thứ trong 2.times { ... }
bản sao kết quả trên:
2.times { puts 3.times { puts 4 } }
# 4
# 4
# 4
# 3
# 4
# 4
# 4
# 3
#=> 2
Nó cũng trả về 2
thay vì nil
vì 2.times { ... }
.
Thêm puts
in rằng 2
:
puts 2.times { puts 3.times { puts 4 } }
# 4
# 4
# 4
# 3
# 4
# 4
# 4
# 3
# 2
#=> nil
Wrapping này trong 1.times { ... }
sẽ cho kết quả tương tự, nhưng thay đổi kết quả nil
-1
:
1.times { puts 2.times { puts 3.times { puts 4 } } }
# 4
# 4
# 4
# 3
# 4
# 4
# 4
# 3
# 2
#=> 1
Thêm puts
in trước rằng 1
:
puts 1.times { puts 2.times { puts 3.times { puts 4 } } }
# 4
# 4
# 4
# 3
# 4
# 4
# 4
# 3
# 2
# 1
#=> nil
Ah Gotcha. Không nhận ra rằng phương thức 'times' trả về người nhận. Làm cho cảm giác bây giờ. Cảm ơn sự cố chi tiết! – breed