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 <= 1010以下の場合はbreakとしてi。このコードはどのような手順を実行しますか。つまり、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ループ内でコードを実行する場合。式がfalseの場合、そうではありません。

したがって、他の投稿者が指摘しているように、while true常にループ内でコードを実行します。幸いなことに、コードにはbreakループ内にステートメントがあります。そうでなければ、ループは永久に実行され、プログラムを実行しているプロセスを強制終了する必要があります。

コードサンプルでは、​​キーワードの後にbreak​​キーワードが続きます。これは、それに続く式がtrueunlessであることを意味します。iが10より大きい場合、コードはループから抜け出します。breakunless

于 2012-05-27T19:27:20.103 に答える
1
  • while true無限ループです。
  • break unless i <= 10が以下のbreak if i > 10場合、そのループを中断するのと同じですi10
于 2012-05-27T19:13:41.107 に答える