Ruby 整数 #times 和模数的奇怪行为

  • 本文关键字:整数 #times Ruby ruby
  • 更新时间 :
  • 英文 :


如果我运行这个

100.times do |i|
unless i == 0 || i.modulo(2) == 0
p "odd number #{i}"
end
end

我只得到奇数,这是它应该工作的方式。

如果我运行这个虽然

100.times do |i|
unless i == 0 || i.modulo(3) == 0
p "even number #{i}"
end
end

然后我得到一个混合的数字,其中一些是偶数。

也许是我,或者"除非"不是在这里使用的最佳控件。 有点奇怪,虽然那个给了我想要的结果,另一个没有。

i.modulo(3) == 0不是奇数的测试;它是可被3整除的数字的测试。

回想一下偶数的定义可以被二(或x % 2 == 0(整除,奇数是!even。因此,只有偶数与奇数的模测试是 mod 2,结果为 0 或 1。

例:

100.times { |i| 
p "even number #{i}" unless i % 2==1 # better as if i % 2==0 
p "odd number #{i}" unless i % 2==0  # better as if i % 2==1
}

为了保持直截了当,您还可以使用.even?.odd?

最新更新