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

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

还有更好的办法吗?


当前回答

是的,我们有一条干净的红宝石路。

discount.to_f.zero?

这个检查处理了大量的情况,即折扣可能是nil,折扣可能是int 0,折扣可能是浮动0.0,折扣可能是字符串“0.0”,“0”。

其他回答

unless [nil, 0].include?(discount) 
  # ...
end
if discount and discount != 0
  ..
end

更新,它将为false折扣= false

是的,我们有一条干净的红宝石路。

discount.to_f.zero?

这个检查处理了大量的情况,即折扣可能是nil,折扣可能是int 0,折扣可能是浮动0.0,折扣可能是字符串“0.0”,“0”。

if (discount||0) != 0
  #...
end
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

当心那些常见的免责声明……巨大的权力/责任,猴子补丁导致黑暗面等等。