2016-12-24 74 views
4

在回答this questionMathWorks的支持團隊指出:重載! (爆炸)運營商

​​

我曾經嘗試這樣做,它似乎並沒有工作。我在Linux Mint上運行Matlab 9.1.0.441655(R2016b)。我的路徑看起來像這樣:

/home/raphael/Programs/Test 
/usr/local/MATLAB/R2016b/toolbox/matlab/iofun 
... 
/usr/local/MATLAB/R2016b/toolbox/matlab/general 
... 

,我已經在/home/raphael/Programs/Test創建的文件!.m。無論我在這個文件中編輯器顯示錯誤:

Line 1: Unable to run code analysis. '/home/raphael/Programs/Test/!.m' is an invalid file name. 

由於! (bang)運算符未在Operators and associated function list中列出,但不清楚要在!.m文件中放入什麼內容。

我也仍然試圖把一些代碼:

function bang(c) 

disp(c) 

但儘管which !回報我的自定義文件的路徑,MATLAB總是調用內置的操作:

>> which ! 
/home/raphael/Programs/Test/!.m 

>> !pwd 
/home/raphael/Programs/Test 

重命名文件bang.m解決了錯誤,但對爆炸操作員沒有影響。

所以:

  • 因爲R2012難道Matlab的行爲改變了嗎?
  • 怎麼可能超負荷! (砰)運營商?
  • 如果這實際上是可能的,函數聲明的語法應該是什麼?

回答

5

看起來這個無證處理!.m在R2015b中消失了(大概是隨着該版本引入的新的執行引擎更改)。

對於除R2015b早期版本中,你確實可以命名路徑上的一個文件!.m然後函數名稱的文件並不重要(因爲它從來沒有在MATLAB一樣)。

!.m

function bang(varargin) 
    disp('bang!') 
end 

在MATLAB的當前版本中,!操作者會忽略你的!.m文件,但會調用底層systemunix,或dos命令。因此,您需要重載那些命令。

所以在OS X上,超載只是unix.m的伎倆:

unix.m

function varargout = unix(varargin) 
    disp('My Unix Command') 
    [varargout{1:nargout}] = builtin('unix', varargin{:}); 
end 
+0

偉大的答案,謝謝! – Ratbert