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; 这使得整个条件毫无意义.
我究竟做错了什么?
你应该有:
unless i%2 == 1
Run Code Online (Sandbox Code Playgroud)
或者,等效地:
if i%2 == 0
Run Code Online (Sandbox Code Playgroud)
出乎意料的行为的原因是Ruby 在条件语句中处理0除了false和nil"truthy" 之外的所有值(包括).
在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)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |