我使用下面的代码来检查一个变量是否不为零
if(discount != nil && discount != 0)
...
end
还有更好的办法吗?
我使用下面的代码来检查一个变量是否不为零
if(discount != nil && discount != 0)
...
end
还有更好的办法吗?
当前回答
你可以利用NilClass提供的#to_i方法,它将为nil值返回零:
unless discount.to_i.zero?
# Code here
end
如果折扣可以是小数,则可以使用#to_f来代替,以防止数字四舍五入为零。
其他回答
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
当心那些常见的免责声明……巨大的权力/责任,猴子补丁导致黑暗面等等。
if (discount||0) != 0
#...
end
另一种解决方案是使用Refinements,如下所示:
module Nothingness
refine Numeric do
alias_method :nothing?, :zero?
end
refine NilClass do
alias_method :nothing?, :nil?
end
end
using Nothingness
if discount.nothing?
# do something
end
从Ruby 2.3.0开始,您可以将安全导航操作符(&.)与数字#非零?结合使用。&。如果实例为nil且非零,则返回nil ?—如果数字为0:
if discount&.nonzero?
# ...
end
或后缀:
do_something if discount&.nonzero?
if discount and discount != 0
..
end
更新,它将为false折扣= false