八度中的&和&&有什么区别?

问题描述

最初,我只使用了一个&。但是,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中使用它们,因此建议您这样做。忽略八度;)