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 中,++kk 相同,因为在 MATLAB 中:3 == +3 == ++3 == +++++++3--k 也是如此。这是--k == -(-k) == +k == k。同样,在许多语言中 k++ 表示 return k,然后递增它。然而,在 MATLAB 中,k++k-- 不是有效语法并导致语法错误。

您的代码(在 MATLAB 中)等同于:

print_factor(p(k), p(k));

使用 pprint_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 中 运行 它,则必须重写它。