Ruby 使用&&;操作人员

Ruby 使用&&;操作人员,ruby,ruby-on-rails-3,loops,testing,operators,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

有人能解释一下以下两种方法的区别吗

我想我可能误解了&&运算符的用法,因为唯一的语法差异是运算符两边的参数。我认为,哪一方站在哪一方并不重要?我是不是忽略了什么

以下是两种方法:

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

&&运算符的右侧仅在左侧为true时才得到计算,否则将浪费时间,因为如果左侧为false,您已经知道整个语句为false

在底部,导致错误的代码
(arr[i]
永远不会被计算为导致错误,因为
(right
为false

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