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