Ruby中的模数总是返回false

Sev*_*rin 1 javascript ruby ruby-on-rails code-translation

我需要将以下循环从JavaScript"转换"为Ruby:

for(i=0;i<=b.length-1;i++){
  if(!(i%2)){
    c+=b[i]
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是我尝试在Ruby中编写相同内容的方法:

until i == b.length-1 do
  unless i%2 == true
    c += b[i]
    i += 1
  end  
end
Run Code Online (Sandbox Code Playgroud)

然而,Ruby中的模数运算符似乎始终返回false; 这使得整个条件毫无意义.

我究竟做错了什么?

Mar*_*pka 9

你应该有:

unless i%2 == 1
Run Code Online (Sandbox Code Playgroud)

或者,等效地:

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

出乎意料的行为的原因是Ruby 在条件语句中处理0除了falsenil"truthy" 之外的所有值(包括).


tor*_*o2k 5

在JavaScript和Ruby中,模数运算符都应该返回一个不是布尔值的整数:

2 % 2 
# => 0
3 % 2
# => 1
Run Code Online (Sandbox Code Playgroud)

所以,要检查是否i均匀,你必须实现这样的条件:

unless i % 2 != 0
  # ...
Run Code Online (Sandbox Code Playgroud)

但是,对于目的,我认为这是最好使用的方法之一Integer#even?,并Integer#odd?:

if i.even?
  #...
Run Code Online (Sandbox Code Playgroud)