Ruby 如何比较零和整数?

Ruby 如何比较零和整数?,ruby,null,integer,compare,conditional,Ruby,Null,Integer,Compare,Conditional,在Ruby 2.4中,我的“if”语句中有一部分是这样的 row_data.index{|x| DataHelper.my_function(x) } > num_var 不幸的是,如果“row|u data.index{| x | DataHelper.my_function(x)}”的计算结果为nil,则上述语句将因错误而终止。如果“row_data.index{| x | DataHelper.my_function(x)}”的值为nil,是否有任何方法重写上述内容以使其返回“fa

在Ruby 2.4中,我的“if”语句中有一部分是这样的

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

不幸的是,如果“row|u data.index{| x | DataHelper.my_function(x)}”的计算结果为nil,则上述语句将因错误而终止。如果“row_data.index{| x | DataHelper.my_function(x)}”的值为nil,是否有任何方法重写上述内容以使其返回“false”?我不想在我的“if”语句之前将表达式存储在变量中,因为如果执行不到那里,我甚至可能不需要执行该语句。我觉得有一条直线,但我不知道它是什么。

你可以利用
nil.to\u 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_函数和num_var表示的内容,您可能还需要考虑
num_var==0
的情况,您可以利用
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_函数和num_var表示的内容,您可能还需要考虑
num_var==0
短路评估是两个重要原因

  • 简单的解决方法(
    到s
    到i
    等)可以使您暂时免于引发异常/错误,但有时可能会玩魔鬼把戏来打破您的条件,当条件的一个比较值来自-
    0
    []
    等时,因此,考虑到您的代码在一段时间后可能无法持续足够长的时间,需要格外小心

    例1

    如果x.to\u i>-1逻辑检查使用转换值进入条件块
    的情况下,
    0
    ),则在
    获得批准时,
    可能是危险的

    您可能不介意ex.-1将
    nil
    打印为:
    0不是负整数。这个怎么样

    if x.to_i   
        puts " 1/x is" 1/x
    end
    
    它可以进一步提高
    ZeroDivisionError:每x除以0,即
    nil
    ,在这种情况下,您需要格外小心。可能你从一开始就不想在你的街区内娱乐
    nil

  • 性能干净代码是您每次听到的两个流行语。(
    &&
    )如果前面的条件
    ,使条件执行得更快,则不必担心后面的条件。此外,它还保护进入条件块的
    nil
    值,使其更易受攻击

  • 回答您的问题:

    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
    

    短路评估是两个重要原因的关键

  • 简单的解决方法(
    到s
    到i
    等)可以使您暂时免于引发异常/错误,但有时可能会玩魔鬼把戏来打破您的条件,当条件的一个比较值来自-
    0
    []
    等时,因此,考虑到您的代码在一段时间后可能无法持续足够长的时间,需要格外小心

    例1

    如果x.to\u i>-1
    逻辑检查使用转换值进入条件块
    的情况下,
    0
    ),则在
    获得批准时,
    可能是危险的

    您可能不介意ex.-1将
    nil
    打印为:
    0不是负整数。这个怎么样

    if x.to_i   
        puts " 1/x is" 1/x
    end
    
    它可以进一步提高
    ZeroDivisionError:每x除以0,即
    nil
    ,在这种情况下,您需要格外小心。可能你从一开始就不想在你的街区内娱乐
    nil

  • 性能干净代码是您每次听到的两个流行语。(
    &&
    )如果前面的条件
    ,使条件执行得更快,则不必担心后面的条件。此外,它还保护进入条件块的
    nil
    值,使其更易受攻击

  • 回答您的问题:

    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
    

    我不知道如何将此应用于我的问题。将整数变量:row_data.index{| x | DataHelper.my_function(x)}替换为a,如果它是nill,它将短路循环而不执行第二部分,如果它不是nil,它将继续运行(a>num_var)我不知道如何把这个应用到我的问题上。把你的整数变量:row_data.index{| x | DataHelper.my_function(x)}代替a,如果它是nill,它将使循环短路,不执行第二部分,如果它不是nil,它将继续运行(a>num_var)这个好答案。您应该在
    {
    |
    。这确实有效,但我认为另一个答案应该被接受,原因如下。
    nil。to_I
    有问题,接收函数需要一个整数,而不是真正的解决方法。单表达式一行是很好的,但如果逻辑受到阻碍,则不行。长话短说,如果你需要一个整数,请确保你收到一个整数。回答得好。你应该在
    {
    |
    。这确实有效,但我认为另一个答案应该被接受,原因如下。
    nil。to_I
    有问题,接收函数需要一个整数,而不是真正的解决方法。单表达式一行是很好的,但如果逻辑受到阻碍,则不行。长话短说,如果你需要一个整数,请确保e您收到一个整数。