2016-02-02 19 views
0

如何在不添加文件夾路徑的情況下從MATLAB中的另一個m文件調用m文件? 我不想通過如何在不添加文件夾路徑的情況下直接從MATLAB中的另一個m文件調用m文件

addpath(genpath('')) 
+2

你能給出一個很好的理由說明爲什麼你不想添加路徑嗎? - 您的替代方案是將.m文件複製並粘貼到您的工作目錄(這有點愚蠢)。 – GameOfThrows

+0

我想要一個具有多個.m文件的文件夾。我不想在我的主函數中使用該文件夾中的另一個m文件。也因複製而無法使用複製。 – user5872407

+0

那麼,正如@GameOfThrows所說的那樣,在調用.m-files時有兩個選項:將文件複製到當前工作目錄*或*使用'addpath'。據我所知,沒有其他的選擇可以做到這一點,即使是調用文件的'fullpath',然後嘗試'eval'或'feval'也不行。 – Adriaan

回答

1

的功能全部可視性規則是基於文件夾添加的文件夾。如果你想有不同的可見性,你必須將你的功能放在不同的文件夾中。

通常,避免重複的函數名稱,只是將所有源文件添加到您的搜索路徑是有效的。爲避免重複的函數名稱,您可能需要查看包。

3

類似MATLAB的內置run腳本的功能,你可以將cd放入第二路徑,執行你的函數,然後返回到前一個目錄。

一個小例子:

% testcode.m 
function [output] = testcode(fullfunctionpath, A, B) 
[pathname, functionName] = fileparts(fullfunctionpath); 
olddir = cd(pathname); 

output = feval(functionName, A, B); 
cd(olddir); 
end 

% .\test\testing.m 
function [output] = testing(A, B) 
output = A + B; 
end 

在呼叫:

C = testcode('C:\testcode-matlab\test\testing.m', 1, 2); 

將返回

C = 

    3 

注意,這種方法沒有錯誤處理,也不重複檢查已經存在於你的路徑定義中。如果被調用的函數不存在於目標文件夾中,但存在於路徑中,則MATLAB路徑中的函數仍將被執行。請參閱:Function Precedence Order瞭解更多信息。

相關問題