检查一个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