我正在寻找一种简洁的方法来检查一个值,看它是零还是零.目前我正在做的事情如下:
if (!val || val == 0) # Is nil or zero end
但这看起来很笨拙.
对象有零?方法.
if val.nil? || val == 0 [do something] end
或者,只需一条指令:
[do something] if val.nil? || val == 0
如果你真的喜欢最后带有问号的方法名称:
if val.nil? || val.zero?
# do stuff
end
您的解决方案很好,其他一些解决方案也是如此.
如果你不小心,Ruby可以让你搜索一个很好的方法来做所有事情.
首先,我认为这是关于您可以检查特定条件的最简洁方法.
其次,对我而言,这是一种代码气味,表明您的设计存在潜在缺陷.通常零和零不应该意味着相同的事情.如果可能的话,你应该尝试在你打到这个代码之前消除val为零的可能性,或者通过检查方法的开头或其他一些机制.
你可能有一个完全合理的理由这样做,在这种情况下我认为你的代码是好的,但我至少考虑试图摆脱零检查,如果可能的话.
从Ruby 2.3.0开始,您可以将安全导航operator(&.
)与Numeric#nonzero?
.如果实例是和,则&.
返回- 如果数字为:nil
nil
nonzero?
0
unless val&.nonzero? # Is nil or zero end
或后缀:
do_something unless val&.nonzero?
你可以使用Object.nil吗?特别测试nil(而不是在false和nil之间).您也可以将方法修补为对象.
class Object def nil_or_zero? return (self.nil? or self == 0) end end my_object = MyClass.new my_object.nil_or_zero? ==> false
建议不要这样做,因为同事难以跟踪对象的更改,并且可能会使您的代码无法预测.
nil.to_i返回零,所以我经常这样做:
val.to_i.zero?
但是,如果val是一个不响应#to_i的对象,则会出现异常.