当前位置:  开发笔记 > 编程语言 > 正文

检查变量是否为零并且在ruby中不为零

如何解决《检查变量是否为零并且在ruby中不为零》经验,为你挑选了8个好方法。

我使用以下代码来检查变量是否为零而不是零

if(discount != nil && discount != 0) 
  ...
end

有一个更好的方法吗?



1> Dejan Simic..:
unless discount.nil? || discount == 0
  # ...
end


@ orion-edwards为什么?
目前的"Ruby样式指南"代表`和和或关键字被禁止.这不值得.始终使用&&和|| instead.`.这是正确的,因为大卫和汤姆的原因.
使用'或'很危险.'或'的运算符优先级低于'=',因此以下内容具有意外行为:a = false或true #a在此语句后为false
使用'或'代替||
@xiy目前指南建议假装或者和不存在(||是那个还是&&和?)
使用||,符号比单词更容易阅读.任何试图阅读单词问题的人都能理解这些痛苦 - 只有在你用数学公式编写时才有意义.
@yxi但是根据那些准则,不是||。在这种情况下的首选?
多么古怪的编程语言!

2> madlep..:
class Object
  def nil_zero?
    self.nil? || self == 0
  end
end

# which lets you do
nil.nil_zero? # returns true
0.nil_zero?   # returns true
1.nil_zero?   # returns false
"a".nil_zero? # returns false

unless discount.nil_zero?
  # do stuff...
end

谨防通常的免责声明......强大的权力/责任,猴子补丁导致黑暗面等.



3> Dejan Simic..:
unless [nil, 0].include?(discount) 
  # ...
end


美丽?是.可读?并不是的.

4> rewritten..:

好的,5年过去了....

if discount.try :nonzero?
  ...
end

重要的是要注意,它try是在ActiveSupport gem中定义的,因此它在普通的ruby中不可用.


请注意,这是**特定于**轨道的答案.香草红宝石没有"尝试"方法.

5> ndnenkov..:

从Ruby 2.3.0开始,您可以将安全导航operator(&.)与Numeric#nonzero?.如果实例是和,则&.返回- 如果数字为:nilnilnonzero?0

if discount&.nonzero?
  # ...
end

或后缀:

do_something if discount&.nonzero?


@TomLord,如前面的评论所述,这并不适用于任意对象.相反,它关注的情况是,你知道的东西应该是一个数字,但也可能是"nil".

6> Raimonds Sim..:
if (discount||0) != 0
  #...
end



7> Jeremy Ruten..:

你可以这样做:

if (!discount.nil? && !discount.zero?)

这里的顺序很重要,因为如果discountnil,那么它就没有zero?方法.Ruby的短路评估应该阻止它试图评估discount.zero?,如果discount是的话nil.



8> oivoodoo..:

您可以将空行转换为整数值并检查零?

"".to_i.zero? => true
nil.to_i.zero? => true

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有