是否从左到右按顺序评估了matlab函数参数?

时间:2016-05-23 11:07:02

标签: matlab octave operator-precedence

以下代码是否定义良好?

print_factor(p(++k), p(--k));

八度音中的事情怎么样?

1 个答案:

答案 0 :(得分:3)

不要这样做!这些代码在MATLAB和Octave中都有效,但行为却截然不同。

<强> MATLAB

您拥有的代码实际上是有效 MATLAB代码。但是,它没有达到您的预期。

在许多语言中,++k表示递增k并将其返回。在MATLAB中,++kk相同,因为在MATLAB中:3 == +3 == ++3 == +++++++3--k也是如此。这是--k == -(-k) == +k == k。同样,在许多语言中k++表示返回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中运行它,你将不得不重写它。