代码之家  ›  专栏  ›  技术社区  ›  user7055375

如何将零与整数进行比较?

  •  0
  • user7055375  · 技术社区  · 9 年前

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

    2 回复  |  直到 9 年前
        1
  •  5
  •   srs    9 年前

    短路评估 right way checking nil or false conditionals 对于 两个重要原因 .

    1. 简单的出路 explicit conversions to_s , to_i 等)可以暂时避免引发异常/错误,但有时可能会玩魔鬼把戏 什么时候 您的一个比较值 0 , "" , [] 等等。因此,考虑到您的 代码可能持续时间不够长 在一个时间点之后。

      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 ).

      也许你不会介意 例1 nil 作为: 0 is not a negative integer .这个怎么样?

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

      ZeroDivisionError: divided by 0 对于每个x组件 从一开始就在你的街区内。

    2. 表演 是你每次听到的两个流行语。 Short circuit evaluations ( && 如果 先前条件 false 这使得 值输入到条件块中,使其更容易受到攻击。

    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
    
        2
  •  3
  •   whodini9    9 年前

    你可以利用 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 .