matlab函数参数是否按从左到右的顺序求值?
Are matlab function parameters evaluated in order, from left to right?
下面的代码定义的好吗?
print_factor(p(++k), p(--k));
八度音阶的情况如何?
不要这样做!代码在 MATLAB 和 Octave 中均有效,但行为却大不相同。
MATLAB:
您的代码实际上是有效 MATLAB 代码。然而,它并没有达到您的预期。
在许多语言中,++k
表示递增 k
和 return。在 MATLAB 中,++k
与 k
相同,因为在 MATLAB 中:3 == +3 == ++3 == +++++++3
。 --k
也是如此。这是--k == -(-k) == +k == k
。同样,在许多语言中 k++
表示 return k
,然后递增它。然而,在 MATLAB 中,k++
和 k--
不是有效语法并导致语法错误。
您的代码(在 MATLAB 中)等同于:
print_factor(p(k), p(k));
使用 p
和 print_factor
的两个示例函数在 MATLAB 中测试代码:
p = @(x) 2*x;
print_factor = @(x,y)disp([x,y]);
k = 2;
print_factor(p(++k), p(--k));
4 4
k
k =
2
八度:
在 Octave 中,运算符被定义,并从左到右求值,但我不认为关于增量运算符的 official documentation 对此有任何说明。它可能依赖于平台,就像在 C++ 中一样。但是,它的解释方式可能与其他表达式的求值方式相同,请参阅底部的示例。
您可以在线测试here。
Octave 中完全相同的代码:
p = @(x) 2*x;
print_factor = @(x,y)disp([x,y]);
k = 2;
print_factor(p(++k), p(--k));
6 4
k
k = 2
print_factor(p(++k), p(++k));
6 8
k
k = 4
正如 Dan 评论的那样:在 Octave 中编写不遵循 MATLAB 语法的代码不是一个好主意。如果您想在 MATLAB 中 运行 它,则必须重写它。
下面的代码定义的好吗?
print_factor(p(++k), p(--k));
八度音阶的情况如何?
不要这样做!代码在 MATLAB 和 Octave 中均有效,但行为却大不相同。
MATLAB:
您的代码实际上是有效 MATLAB 代码。然而,它并没有达到您的预期。
在许多语言中,++k
表示递增 k
和 return。在 MATLAB 中,++k
与 k
相同,因为在 MATLAB 中:3 == +3 == ++3 == +++++++3
。 --k
也是如此。这是--k == -(-k) == +k == k
。同样,在许多语言中 k++
表示 return k
,然后递增它。然而,在 MATLAB 中,k++
和 k--
不是有效语法并导致语法错误。
您的代码(在 MATLAB 中)等同于:
print_factor(p(k), p(k));
使用 p
和 print_factor
的两个示例函数在 MATLAB 中测试代码:
p = @(x) 2*x;
print_factor = @(x,y)disp([x,y]);
k = 2;
print_factor(p(++k), p(--k));
4 4
k
k =
2
八度:
在 Octave 中,运算符被定义,并从左到右求值,但我不认为关于增量运算符的 official documentation 对此有任何说明。它可能依赖于平台,就像在 C++ 中一样。但是,它的解释方式可能与其他表达式的求值方式相同,请参阅底部的示例。
您可以在线测试here。
Octave 中完全相同的代码:
p = @(x) 2*x;
print_factor = @(x,y)disp([x,y]);
k = 2;
print_factor(p(++k), p(--k));
6 4
k
k = 2
print_factor(p(++k), p(++k));
6 8
k
k = 4
正如 Dan 评论的那样:在 Octave 中编写不遵循 MATLAB 语法的代码不是一个好主意。如果您想在 MATLAB 中 运行 它,则必须重写它。