【发布时间】:2014-10-10 14:17:03
【问题描述】:
我希望 while 循环返回它执行的最后一条语句,但函数似乎没有返回它。
(1)这似乎有效..
[10] pry(main)> counter = 0
=> 0
[11] pry(main)> a = counter+=1 while counter < 10
=> nil
[12] pry(main)> a
=> 10
(2) 这不像我预期的那样工作。我希望返回 10 并将其存储到 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
问题:
- 为什么在 (1) 中,
nil会从赋值语句中返回? - 为什么
b没有被分配10?
更新:
正如@DaveNewton 提到的,在(1)中,我以为我在做:
a = (counter +=1 while counter < 10)
但我实际上是这样做的:
(a = counter +=1) while counter < 10
【问题讨论】:
-
你在做不同的事情。 (1) 得到一个
nil并显示它,(2) 也是如此。在 (1) 中,您正在递增一个局部变量counter,并显示它。在(2)中设置了一个局部变量b调用increment的返回结果,即nil。 -
哇。感谢@DaveNewton 的花絮!
标签: ruby