不要这样做!该代码在 MATLAB 和 Octave 中都有效,但行为却大不相同。
MATLAB:
您拥有的代码实际上是有效 MATLAB 代码。但是,它并没有达到您的预期。
在许多语言中,++k 表示递增 k 并返回它。在 MATLAB 中,++k 与 k 相同,因为在 MATLAB 中:3 == +3 == ++3 == +++++++3。 --k 也是如此。这是--k == -(-k) == +k == k。类似地,在许多语言中k++ 意味着返回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 中运行它,则必须重写它。