最初我使用了一个&
。然而,奥克塔夫说;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
,您需要使用数组的所有行。为什么Octave建议使用double因为Octave是错误的。Octave看到您使用2个数组和一个逻辑运算符,并假设您在if
而不是find
中使用它们,因此建议这样做。忽略倍频程;(