两种方法的区别使用&&操作者

时间:2015-01-20 01:52:38

标签: ruby ruby-on-rails-3 loops testing operators

有人可以解释以下两种方法之间的区别吗?

我想也许我误解了&&和运算符,因为唯一的语法区别是运算符每一侧的参数。我会认为哪一方在哪一方无关紧要?我忽略了什么吗?

以下是两种方法:

def nearest_larger(arr, i)
k = 1 

  loop do
    left = i - k
    right = i + k
      if (arr[i] < arr[left]) && (left >= 0)
        j = left
        return j
      elsif (arr[i] < arr[right]) && (right < arr.length)
        j = right
        return j
      elsif (right >= arr.length) && (left < 0)
        return nil
      end

  k += 1
  end

end


def nearest_larger(arr, i)
k = 1 

  loop do
    left = i - k
    right = i + k
      if (left >= 0) && (arr[i] < arr[left])
        j = left
        return j
      elsif (right < arr.length) && (arr[i] < arr[right])
        j = right
        return j
      elsif (right >= arr.length) && (left < 0)
        return nil
      end

  k += 1
  end

end

底部通过测试,而顶部的一个给我这个错误:

Failure/Error: nearest_larger( [2, 6, 4, 8], 3).should == nil
ArgumentError:
  comparison of Fixnum with nil failed

1 个答案:

答案 0 :(得分:0)

&amp;&amp;&amp;如果左侧是真的,则仅对运算符进行求值,否则会浪费时间,因为如果左侧为假,您已经知道整个语句为假。

在底部,导致错误(arr[i] < arr[right])的代码永远不会被评估为导致错误,因为(right < arr.length)为false。