首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用.zero?而不是==0?

使用.zero?而不是==0?
EN

Stack Overflow用户
提问于 2015-06-27 14:29:14
回答 2查看 97关注 0票数 2

我是遗漏了一些简单的东西,还是在不应该使用的情况下使用.zero?

这样做是可行的:

代码语言:javascript
代码运行次数:0
运行
复制
(1..100).each do |num|
  puts(num%15==0 ? "FizzBuzz" : num%5==0 ? "Buzz" : num% 3==0 ? "Fizz" : num)
end

这并不是:

代码语言:javascript
代码运行次数:0
运行
复制
(1..100).each do |num|
  puts(num%15.zero? "FizzBuzz" : num%5.zero? "Buzz" : num% 3.zero? "Fizz" : num)
end

当我使用第二个代码块时,我会得到以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-27 14:45:49

三元操作符使用?zero?中的问号是方法名称的一部分,而不是三元运算符。另外:zero?方法分别在15、5、3上执行,而不是在num%15等上执行。下面是正确的版本。第一个版本要干净得多。

代码语言:javascript
代码运行次数:0
运行
复制
(1..100).each do |num|
  puts((num%15).zero? ? "FizzBuzz" : (num%5).zero? ? "Buzz" : (num% 3).zero? ? "Fizz" : num)
end
票数 3
EN

Stack Overflow用户

发布于 2015-06-27 17:25:14

在Ruby中,不鼓励使用多个三元语句来提供复杂的条件测试。它会导致难以阅读和维护的代码。而不是使用:

代码语言:javascript
代码运行次数:0
运行
复制
(1..100).each do |num|
  puts(num%15==0 ? "FizzBuzz" : num%5==0 ? "Buzz" : num% 3==0 ? "Fizz" : num)
end

使用这样的方法:

代码语言:javascript
代码运行次数:0
运行
复制
(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

代码语言:javascript
代码运行次数:0
运行
复制
(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

通过这种方式可以很容易地看到正在发生的事情,查看有条件的测试,并确定在代码中断时返回的值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31089808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档