检查一个variables是不是零和ruby不为零
我正在使用下面的代码来检查一个variables是不是零,而不是零
if(discount != nil && discount != 0) ... end 有一个更好的方法吗?
除非discount.nil? || 折扣== 0 #... 结束
 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 
谨防通常的免责声明…巨大的权力/责任,导致黑暗面的猴子补丁等
好的,5年过去了….
 if discount.try :nonzero? ... end 
除非[零,0]。包括?(折扣) #... 结束
 if (discount||0) != 0 #... end 
 从Ruby 2.3.0开始,您可以将安全导航运算符( &. )与Numeric#nonzero?  。 &. 如果实例nil且nonzero?则返回nil nonzero?  – 如果这个数字是0 : 
 if discount&.nonzero? # ... end 
或者后缀:
 do_something if discount&.nonzero? 
你可以这样做:
 if (!discount.nil? && !discount.zero?) 
 这里的顺序很重要,因为如果discount是nil ,那么它不会zero? 方法。  Ruby的短路评估应该防止它试图评估discount.zero? 但是,如果discount是nil 。 
你可以将空行转换为整数值并检查零?
 "".to_i.zero? => true nil.to_i.zero? => true 
 if discount and discount != 0 .. end 
 更新, discount = false将为discount = false 
 您可以利用NilClass提供的#to_i方法,该方法将nil值返回零值: 
 unless discount.to_i.zero? # Code here end 
 如果discount可以是小数,则可以使用#to_f来防止数字四舍五入为零。 
 def is_nil_and_zero(data) data.blank? || data == 0 end 
如果我们通过“”将返回false而空白? 返回true。 数据=虚假空白的情况也是如此 对于零,假,空或空白string返回true。 所以最好使用空白? 避免空string的方法。
在处理数据库logging时 ,我喜欢用0来初始化所有的空值,使用迁移助手:
 add_column :products, :price, :integer, default: 0 
 if discount.nil? || discount == 0 [do something] end 
只要您的代码在初始化之前保证不尝试使用,您可以将折扣初始化为0。 这将取消一个支票,我想不出来。
我相信以下对于Ruby代码来说已经足够了。 我不认为我可以写一个unit testing,显示这个和原来的区别。
 if discount != 0 end