我如何比较一个整数的零?

时间:2017-08-03 20:37:18

标签: ruby null integer compare conditional

使用Ruby 2.4,我的部分内容是“if”语句

row_data.index{|x| DataHelper.my_function(x) } > num_var

不幸的是,如果“row_data.index {| x | DataHelper.my_function(x)}”的计算结果为nil,则上述语句会出错。有没有办法重写上面的内容,如果“row_data.index {| x | DataHelper.my_function(x)}”被评估为nil,它将返回“false”?我不希望将表达式存储在我的“if”语句之前的变量中,因为如果执行没有到达那里,我可能不需要执行该语句。我觉得有一个单行,但我不知道它是什么。

2 个答案:

答案 0 :(得分:2)

短路评估的两个重要原因 {/ 3}。

  1. 简单的出路right way checking nil or false conditionalsto_sto_i等)可以暂时避免引发异常/错误,但有时可以玩魔鬼技巧打破您的条件当条件的您的一个比较值来自 - 0""[]等时。因此,明确的关注是考虑到你的代码可能会在一段时间后持续时间不够长

    实施例。 - 1

    if x.to_i > -1    
        puts x "is not a negative integer"
    else
        puts x "is a negative integer"
    end
    

    nil.to_i :=> 0逻辑检查进入带有转换值的条件块if x.to_i > -1获得批准可能会有危险0 nil.to_i })。

    可能你不会介意 ex。 - 1 nil打印为:0 is not a negative integer。怎么样?

    if x.to_i   
        puts " 1/x is" 1/x
    end
    

    它可以进一步提升每个x的ZeroDivisionError: divided by 0 nil,并且在这些情况下您需要额外注意。可能你不想从第一个地方开始在你的街区内招待nil

  2. 效果 CLEAN代码是您每次都听到的两个热门词汇。如果先前条件&&,则explicit conversionsfalse)不会对后续条件感到烦恼,这会使条件执行得更快< / strong>即可。此外,它还可以保护进入条件块的nil值,并使其更容易受到攻击。

  3. 回答您的提问:

    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
    

答案 1 :(得分:1)

您可以利用nil.to_i返回0

if row_data.index{ |x| DataHelper.my_function(x) }.to_i > num_var
  # index is bigger than num_var
else
  # index is smaller or equal to num_var
end

根据my_function和num_var的含义,您可能还需要考虑num_var == 0的情况。