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 發出錯誤資訊。
必須指出的是,這種搜尋是以花費更多執行時間為代價的。