我使用下面的代码来检查一个变量是否不为零
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
当心那些常见的免责声明……巨大的权力/责任,猴子补丁导致黑暗面等等。
在处理数据库记录时,我喜欢使用迁移帮助器将所有空值初始化为0:
add_column :products, :price, :integer, default: 0
我相信下面的代码对于ruby代码来说已经足够好了。我不认为我可以写一个单元测试来显示这个和原来的有什么不同。
if discount != 0
end
unless [nil, 0].include?(discount) # ... end
def is_nil_and_zero(data)
data.blank? || data == 0
end
如果我们传递""它将返回false,而空白?返回true。 当data = false时也是如此 空白的吗?对于nil、false、空或空白字符串返回true。 所以用空白更好吗?方法以避免空字符串。