2016-05-23 93 views
2

並且下面的代碼是否定義良好?從左到右依次評估matlab函數參數嗎?

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

那麼事情看起來像八度?

+3

'x ++'在MATLAB中是無效的語法。 –

+0

這不是MATLAB的語法,我建議不要在Octave中使用它,因爲你會殺死MATLAB的兼容性而沒有真正的優勢。 – Dan

回答

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)); 

測試的代碼中MATLAB具有兩個示例功能pprint_factor

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

完全相同的代碼在八度:

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  

正如丹說:在編寫代碼八度不遵循MATLAB的語法是不是一個好主意。如果你想在MATLAB中運行它,你將不得不重寫它。

+0

我不會說這是一個有效的代碼,而是一個無法引發錯誤的解析器錯誤。 – percusse

+1

咦?在MATLAB中?爲什麼?你會考慮:'k = -3; p(-k);'也是無效的? –

+0

我的意思是這個'p(++++++ k)'有效是錯誤的。 – percusse