有人可以解释以下两种方法之间的区别吗?
我想也许我误解了&&和运算符,因为唯一的语法区别是运算符每一侧的参数。我会认为哪一方在哪一方无关紧要?我忽略了什么吗?
以下是两种方法:
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
答案 0 :(得分:0)
&amp;&amp;&amp;如果左侧是真的,则仅对运算符进行求值,否则会浪费时间,因为如果左侧为假,您已经知道整个语句为假。
在底部,导致错误(arr[i] < arr[right])
的代码永远不会被评估为导致错误,因为(right < arr.length)
为false。