1. 程式人生 > >matlab中關於不同包中的同名函式的呼叫問題

matlab中關於不同包中的同名函式的呼叫問題

問題描述:

例如兩個工具包package A和B的路徑都加到了search path中,A的路徑在B的前面,且兩個包中都有名稱為func的函式。在其他地方呼叫func的時候,由於A的路徑排在前面,故執行的是包A中的func。那如果我想執行包B中的函式,該怎麼辦呢?

解決方法:

在自己的程式的開頭加上rmpath('包A的路徑'),即在當前的環境下臨時在search path中刪除包A的路徑。所以再執行func時,執行的是包B中的func。

補充:

1. 臨時新增或刪除search path

臨時新增path:addpath('路徑');

臨時刪除path:rmpath('路徑');

這裡臨時的意思是search path的改變只發生在當前啟動的matlab例項,如果把當前例項關閉再開啟或者重新開啟一個例項,你會發現search path中的路徑並不會受之前臨時新增或刪除的影響。

那麼如果我永久儲存臨時路徑的改變,即重新開啟matlab時改變依然存在,應該怎麼做呢?

方法1:視窗介面操作,臨時改變path後,點選set path,然後點選save。

方法2:命令列操作,在命令列中輸入savepath,然後回車。

2. 關於matlab中搜索機制

如果在命令提示符“>>”後輸入符號 xt,或程式語句中有一個符號 xt,那麼, MATLAB
將試圖按下列次序去搜索和識別: 
(1) 在 MATLAB 記憶體中進行檢查搜尋,看 xt 是否為工作空間視窗的變數或特殊常量,
如果是,則將其當成變數或特殊常量來處理,不再往下展開搜尋識別; 
(2) 上一步否定後,檢查 xt 是否為 MATLAB 的內部函式,若肯定,則呼叫 xt 這個內
部函式; 
(3) 上一步否定後,繼續在當前目錄中搜索是否有名為“xt.m”或“xt.mex”的檔案存
在,若肯定,則將 xt 作為檔案呼叫; 
(4) 上一步否定後,繼續在 MATLAB搜尋路徑的所有目錄中搜索是否有名為“xt.m”
或“xt.mex”的檔案存在,若肯定,則將 xt 作為檔案呼叫; 
(5) 上述 4 步全走完後,仍未發現 xt 這一符號的出處,則 MATLAB 發出錯誤資訊。 
必須指出的是,這種搜尋是以花費更多執行時間為代價的。