我使用以下代码来检查变量是否为零而不是零
if(discount != nil && discount != 0) ... end
有一个更好的方法吗?
unless discount.nil? || discount == 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
谨防通常的免责声明......强大的权力/责任,猴子补丁导致黑暗面等.
unless [nil, 0].include?(discount) # ... end
好的,5年过去了....
if discount.try :nonzero? ... end
重要的是要注意,它try
是在ActiveSupport gem中定义的,因此它在普通的ruby中不可用.
从Ruby 2.3.0开始,您可以将安全导航operator(&.
)与Numeric#nonzero?
.如果实例是和,则&.
返回- 如果数字为:nil
nil
nonzero?
0
if discount&.nonzero? # ... end
或后缀:
do_something if discount&.nonzero?
if (discount||0) != 0 #... end
你可以这样做:
if (!discount.nil? && !discount.zero?)
这里的顺序很重要,因为如果discount
是nil
,那么它就没有zero?
方法.Ruby的短路评估应该阻止它试图评估discount.zero?
,如果discount
是的话nil
.
您可以将空行转换为整数值并检查零?
"".to_i.zero? => true nil.to_i.zero? => true