问题描述
最初,我只使用了一个&
。但是,Octave表示使用“ MATLAB样式的快捷方式”。因此,我将&&
改为两倍。如您所见,相等查找器仅适用于单个&
,而不适用于&&
:
find(node(:,1)==b && node(:,2)==ro)
ans = [](0x0)
find(node(:,1)==b & node(:,2)==ro)
ans = 6
为什么两个结果不相等?
解决方法
双重逻辑操作&&
和||
是短路操作。
它们有非常强大的用途:他们不会评估所有条件。这对于诸如以下的事情非常有用:
if (a==5) && super_slow_computation_here()
在上述情况下,如果a
不等于5
,甚至不会计算super_slow_computation_here
,它将“短路” if
条件,我们知道这不是真的(and
)。只需使用一个&
,它将同时计算两者,然后计算and
。
显然这不是您想要的,您希望计算所有条件,因为您正在调用find
,因此需要使用数组的所有行。那么,为什么八度建议使用double? 因为八度音阶错误。 Octave看到您使用2个数组和一个逻辑运算符,并假设您在if
而非find
中使用它们,因此建议您这样做。忽略八度;)