2016-08-05 4 views
0

私は、次のルビーのコードブロックがあります。ここではなぜそれが偽である場合に条件を返さないか?

x = 1 

loop do 
    x+=1 

    next unless (x % 2) == 0 
    puts x 


    break if x >=10 
end 

My output: 
2 
4 
6 
8 
10 

それがfalseの場合、つまりx%2があり、意味0以外の残りの部分に何かを与える(x % 2) ==0でない限り、それはputsを行う必要がありますが、すべての倍数2を含む2の値は、(x%2)==0を真とします。私は文など何かを間違って解釈していますか?

答えて

2

next文は、ループの最初に戻ることを意味します。私はそれがあなたが欠けているものだと思います。

したがって、(x % 2) == 0が奇数の場合、nextステートメントが実行され、プログラムはループの残りの部分をスキップします。つまり、奇数は決して印刷されません。

2

あなたのコードを明示的next unless (x % 2) == 0は「xが奇数の場合、次のループの繰り返しに行く」を意味し、next if x.odd?と同じである、next unless x.even?と同じである、と言います。その結果、偶数が印刷されます。

+1

'odd? 'のようなメソッドは、あなたの意図を伝えるのにかなり役立ちます。 '(x%2)== 0'はあなたが注意を払わなければ処理するのが難しいです。 – tadman

関連する問題