八度音程中的&和&&有什么区别?
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
不等于5
,super_slow_computation_here
甚至不会被计算,它会“短路”if
条件,因为我们知道它不会是真的 (and
)。使用单个 &
它将计算两者,然后计算 and
.
显然这不是您想要的,您需要计算所有条件,因为您正在调用 find
,您需要使用数组的所有行。那么为什么Octave建议使用double呢? 因为 Octave 是错误的。 Octave 看到您使用了 2 个数组和一个逻辑运算符,并假设您在 if
而不是 find
中使用它们,所以建议这样做。忽略八度 ;)
最初我只用了一个&
。然而,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
不等于5
,super_slow_computation_here
甚至不会被计算,它会“短路”if
条件,因为我们知道它不会是真的 (and
)。使用单个 &
它将计算两者,然后计算 and
.
显然这不是您想要的,您需要计算所有条件,因为您正在调用 find
,您需要使用数组的所有行。那么为什么Octave建议使用double呢? 因为 Octave 是错误的。 Octave 看到您使用了 2 个数组和一个逻辑运算符,并假设您在 if
而不是 find
中使用它们,所以建议这样做。忽略八度 ;)