Ruby:可被4整除

sno*_*gel 29 ruby modulo

这工作正常,但我想让它更漂亮 - 并容纳所有可被4整除的值:

if i==4 || i==8 || i==12 || i==16 || i==20 || i==24 || i==28 || i==32
  # ...
end
Run Code Online (Sandbox Code Playgroud)

任何聪明,简短的方法吗?

Ser*_*sev 131

试试这个:

if i % 4 == 0
Run Code Online (Sandbox Code Playgroud)

这被称为" 模运算符 ".

  • @snowangel:我必须喝完茶.否则我会提前两分钟回答:-) (12认同)
  • 请注意,如果我是一个像'8'这样的字符串,它将默默地失败并返回'8'而不是0.这里没有类型强制.所以确保我是一个整数. (2认同)

And*_*imm 49

还有modulo,这可以让你做到

420.modulo(4).zero?
Run Code Online (Sandbox Code Playgroud)

没有什么可以阻止你这样做%,但它看起来很奇怪:

420.%(4).zero?
Run Code Online (Sandbox Code Playgroud)

  • `(420%4).zero?` (11认同)
  • 你每天都学到一些东西.我喜欢这个网站:-) (2认同)
  • 与上面的先前答案不同,如果您采用这条路线并且变量不是 Integer 或 Float 子类,您将收到运行时错误。 (2认同)

Mat*_*att 12

这始终是一个很好的对话启动器:

if (i & 3).zero?
Run Code Online (Sandbox Code Playgroud)

  • 这个答案的年龄和缺乏评论让我大笑:P (12认同)
  • `i.nobits?(3)` 在 Ruby 2.5+ 中 (2认同)