ruby - 使用.zero?而不是==0?

标签 ruby

我是否遗漏了一些简单的东西,或者我是否使用了 .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/

相关文章:

ruby-on-rails - Ruby - block 作用域

ruby-on-rails - Ruby - 为什么这个构造返回零?

javascript - rails + Chartkick : How to change the date format of the tooltip?

jquery - 在 rails 中通过 remote_function 中的表单生成器?

ruby - 安装 cocoapods 时出现 SSL 验证错误

ruby-on-rails - ||之间的差异并内联 if 语句?

ruby - `extend self` 在 Ruby 中意味着什么?

ruby - 纤维#alive?没有定义的

ruby-on-rails - 向 friend 展示您本地的 Rails 项目时,您更喜欢什么?

ruby - 替换特定单词模式后未出现的所有冒号字符