0

Ruby の非常に基本的なブロック:

list = (1..125).to_a
list.each do |x|
    print x if 125 % x = 0
end

私に与えます:

ZeroDivisionError: divided by 0
from (irb):3:in `%'
from (irb):3
from (irb):2:in `each'
from (irb):2

それでも、ブロック「puts x」は、本来あるべきように 1 から 125 を返します。

何が起こっている?

4

2 に答える 2

11

%演算子が評価される前に x に 0 を割り当てています。

print x if 125 % x = 0

最後のビットx = 0割り当てであることに注意してください。==等しいかどうかをテストするには、次を使用する必要があります。

print x if 125 % x == 0
于 2012-01-05T18:39:17.967 に答える
1

を逃しました=。あいまいに見える場合は、評価順序を強制してみてください。

print x if (125 % x) == 0

于 2012-01-05T18:48:02.643 に答える