2

第 4 行和第 5 行让我很伤心:

1  def test_break_statement
2     i = 1
3     result = 1
4     while true
5       break unless i <= 10
6       result = result * i
7       i += 1
8     end
9     assert_equal 3628800, result
10  end

我不确定while true声明中需要保持真实的内容,但我相信它是遵循它的代码。这会导致进一步的混乱,因为我正在阅读以下行:

break unless i <= 10as break ifi不小于或等于 10。这段代码经历了什么过程,即 while 和 break 语句如何相互作用。我想我快到了,但不能把这个过程放在我的脑海里。谢谢。

4

4 回答 4

3

当 i 大于 10 时,代码将跳出无休止的 while 循环。但我不确定为什么没有在 while 语句中检查条件。

编辑:如果我阅读了方法名称,我会理解为什么不直接使用 while 语句检查条件。该方法的目的是测试 break 语句。

于 2012-05-27T19:12:48.173 回答
2

while true是一个无限循环。break,当执行时,将立即退出它,继续它之后的第一行(assert_equal...)。

while在这种特定情况下(和之间没有任何干预break unless),它等效于:

 while i <= 10
   result = result * i
   i += 1
 end
于 2012-05-27T19:12:29.780 回答
2

while语句测试单词之后的任何内容,while. 如果它们后面的表达式是true它们执行循环内的代码。如果表达式为假,则它们不会。

因此,正如其他张贴者所指出的那样,while true将始终在循环内执行代码。break幸运的是,您的代码在循环中有一条语句。如果没有,循环将永远运行,您必须终止运行程序的进程。

在您的代码示例中,break关键字后面跟着它,unless这意味着它将break循环unless后面的表达式为真。当 i 大于 10 时,您的代码将跳出循环。

于 2012-05-27T19:27:20.103 回答
1
  • while true这是无限循环。
  • break unless i <= 10相同,如果小于或等于,break if i > 10它将打破该循环i10
于 2012-05-27T19:13:41.107 回答