解决方法
我也没有真正得到那个输出,所以让我们从最里面的表达开始剖析它:
puts 4 # 4 <- this should denote output #=> nil <- this should denote return value
它打印4并返回nil(puts
总是返回nil).
将它包装成3次{…}打印4次3次:
3.times { puts 4 } # 4 # 4 # 4 #=> 3
但不是返回nil,而是返回3.这是因为times
总是返回接收者(即你调用的整数时间).
现在让我们添加另一个看跌期权:
puts 3.times { puts 4 } # 4 # 4 # 4 # 3 #=> nil
与上面相同,但也打印3次{…}的结果,即3.
2.times { puts 3.times { puts 4 } } # 4 # 4 # 4 # 3 # 4 # 4 # 4 # 3 #=> 2
由于2次{…},它也返回2而不是nil.
添加put打印2:
puts 2.times { puts 3.times { puts 4 } } # 4 # 4 # 4 # 3 # 4 # 4 # 4 # 3 # 2 #=> nil
在1.times {…}中包装它会产生相同的输出,但会将结果从nil更改为1:
1.times { puts 2.times { puts 3.times { puts 4 } } } # 4 # 4 # 4 # 3 # 4 # 4 # 4 # 3 # 2 #=> 1
添加最后一次放置打印1:
puts 1.times { puts 2.times { puts 3.times { puts 4 } } } # 4 # 4 # 4 # 3 # 4 # 4 # 4 # 3 # 2 # 1 #=> nil