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

What is the difference between & and && in octave?

最初我只用了一个&。然而,Octave 表示要使用“MATLAB 风格的快捷方式”。所以我改成了double&&。如您所见,相等查找器适用于单个 & 但不适用于 &&:

find(node(:,1)==b && node(:,2)==ro)
  ans = [](0x0)
find(node(:,1)==b & node(:,2)==ro)
  ans =  6

为什么两个结果不相等?

双重逻辑运算,&&||是short-circuit运算。

它们有一个非常强大的用途:它们不会评估所有条件。这对于以下内容非常有用:

if (a==5) && super_slow_computation_here()

在上面的例子中,如果a不等于5super_slow_computation_here甚至不会被计算,它会“短路”if条件,因为我们知道它不会是真的 (and)。使用单个 & 它将计算两者,然后计算 and.

显然这不是您想要的,您需要计算所有条件,因为您正在调用 find,您需要使用数组的所有行。那么为什么Octave建议使用double呢? 因为 Octave 是错误的。 Octave 看到您使用了 2 个数组和一个逻辑运算符,并假设您在 if 而不是 find 中使用它们,所以建议这样做。忽略八度 ;)