我使用下面的代码来检查一个变量是否不为零

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

还有更好的办法吗?


当前回答

我相信下面的代码对于ruby代码来说已经足够好了。我不认为我可以写一个单元测试来显示这个和原来的有什么不同。

if discount != 0
end

其他回答

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

if discount.try :nonzero?
  ...
end

需要注意的是,try是在ActiveSupport宝石中定义的,所以在普通ruby中不可用。

if discount.nil? || discount == 0
  [do something]
end

我更喜欢使用更简洁的方法:

val.to_i.zero?

如果val为nil, val.to_i将返回0,

在此之后,我们所需要做的就是检查最终值是否为零。

你可以这样做:

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

这里的顺序很重要,因为如果discount是nil,那么它就不会是0 ?方法。Ruby的短路评估应该阻止它尝试评估折扣。零?,但如果折扣为nil。

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

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