除非在rubykoans中声明,否则会对此感到困惑

时间:2012-05-27 19:09:33

标签: ruby

第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 <= 10不小于或等于10,则

i为中断。此代码执行的步骤是什么,即while和break语句如何相互作用。我想我差不多了,但不能把这个过程放在我脑海里。感谢。

4 个答案:

答案 0 :(得分:3)

当我大于10时,代码将突破无限循环。 但是我不确定为什么在while语句中没有检查条件。

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

答案 1 :(得分:2)

while true是一个无限循环。 break执行后会立即退出,继续执行第一行(assert_equal...)。

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

 while i <= 10
   result = result * i
   i += 1
 end

答案 2 :(得分:2)

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

因此,正如其他海报所指出的那样,while true将始终在循环中执行代码。幸运的是,对于您的代码,循环中有一个break语句。如果没有,循环将永远运行,你必须杀死运行程序的进程。

在您的代码示例中,break关键字后跟unless,这意味着break循环unless后面的表达式为真。当我大于10时,你的代码将会脱离循环。

答案 3 :(得分:1)

  • while true这是无限循环。
  • break unless i <= 10break if i > 10相同,如果i小于或等于10
  • ,它会破坏该循环