我是否遗漏了一些简单的东西,或者我是否使用了 .zero?
在不应该使用它的情况下?
这个有效:
(1..100).each do |num|
puts(num%15==0 ? "FizzBuzz" : num%5==0 ? "Buzz" : num% 3==0 ? "Fizz" : num)
end
这不是:
(1..100).each do |num|
puts(num%15.zero? "FizzBuzz" : num%5.zero? "Buzz" : num% 3.zero? "Fizz" : num)
end
当我使用第二个代码块时出现以下错误:
syntax error, unexpected tSTRING_BEG, expecting keyword_end
...o ? "FizzBuzz" : num%5.zero? "Buzz" : num%3.zero? "Fizz" :...
syntax error, unexpected ':', expecting keyword_end
...zzBuzz" : num%5.zero? "Buzz" : num%3.zero? "Fizz" : num
最佳答案
在 Ruby 中不鼓励使用多个三元语句来提供复杂的条件测试。它导致代码难以阅读和维护。而不是使用:
(1..100).each do |num|
puts(num%15==0 ? "FizzBuzz" : num%5==0 ? "Buzz" : num% 3==0 ? "Fizz" : num)
end
使用类似的东西:
(1..100).each do |num|
response = if num % 15 == 0
'FizzBuzz'
elsif num % 5 == 0
'Buzz'
elsif num % 3 == 0
'Fizz'
else
num
end
puts response
end
或者更好的是,使用 case
语句来摆脱链式 elsif
:
(1..100).each do |num|
response = case
when num % 15 == 0
'FizzBuzz'
when num % 5 == 0
'Buzz'
when num % 3 == 0
'Fizz'
else
num
end
puts response
end
当代码以这种方式分解时,很容易看到发生了什么,查看条件测试并确定返回的值。
关于ruby - 使用.zero?而不是==0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089808/