1 ruby null integer compare conditional-statements
在 Ruby 2.4 中,我将其包含在“if”语句中
row_data.index{|x| DataHelper.my_function(x) } > num_var
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果“row_data.index{|x| DataHelper.my_function(x) }”计算结果为 nil,则上述语句会因错误而终止。有什么方法可以重写上面的内容,以便在“row_data.index{|x| DataHelper.my_function(x) }”计算为零时返回“false”?我不想在“if”语句之前将表达式存储在变量中,因为如果执行未到达那里,我什至可能不需要执行该语句。我感觉有一句台词,但我不知道那是什么。
短路评估是检查 nil 或 false 条件的正确方法,有两个重要原因。
简单的显式转换(等)可以暂时避免引发异常/错误,但有时当条件的比较值之一来自 - 、等时to_s,可能会玩出魔鬼伎俩来破坏你的条件。因此,显式转换考虑到您的代码在一段时间后可能无法持续足够长的时间,请务必小心。to_i0""[]
前任。- 1
if x.to_i > -1
puts x "is not a negative integer"
else
puts x "is a negative integer"
end
Run Code Online (Sandbox Code Playgroud)
它可能很危险,因为在逻辑检查nil.to_i :=> 0时获得批准进入带有转换值的条件块(在 的情况下)。if x.to_i > -10nil.to_i
也许,你不会介意前任。- 1将 a 打印nil为:0 is not a negative integer. 这个怎么样?
if x.to_i
puts " 1/x is" 1/x
end
Run Code Online (Sandbox Code Playgroud)
它可以进一步提高ZeroDivisionError: divided by 0每个x,因为nil在这些情况下你要格外小心。nil也许您从一开始就不想在自己的街区内娱乐。
性能和干净的代码是您经常听到的两个流行词。如果前面的条件使条件语句执行得更快,则短路求值( &&) 不会关心后续的条件语句。此外,它还可以保护进入条件块的值并使其更容易受到攻击。falsenil
回答你的问题:
if (not row_data.index{|x| DataHelper.my_function(x) }.nil?) && (row_data.index{|x| DataHelper.my_function(x) } > num_var)
# do your if block here
# this keeps nil away
else
puts "row_data.index{|x| DataHelper.my_function(x) } is nil"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4013 次 |
| 最近记录: |