如何在不添加文件夾路徑的情況下從MATLAB中的另一個m文件調用m文件? 我不想通過如何在不添加文件夾路徑的情況下直接從MATLAB中的另一個m文件調用m文件
addpath(genpath(''))
如何在不添加文件夾路徑的情況下從MATLAB中的另一個m文件調用m文件? 我不想通過如何在不添加文件夾路徑的情況下直接從MATLAB中的另一個m文件調用m文件
addpath(genpath(''))
的功能全部可視性規則是基於文件夾添加的文件夾。如果你想有不同的可見性,你必須將你的功能放在不同的文件夾中。
通常,避免重複的函數名稱,只是將所有源文件添加到您的搜索路徑是有效的。爲避免重複的函數名稱,您可能需要查看包。
類似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瞭解更多信息。
你能給出一個很好的理由說明爲什麼你不想添加路徑嗎? - 您的替代方案是將.m文件複製並粘貼到您的工作目錄(這有點愚蠢)。 – GameOfThrows
我想要一個具有多個.m文件的文件夾。我不想在我的主函數中使用該文件夾中的另一個m文件。也因複製而無法使用複製。 – user5872407
那麼,正如@GameOfThrows所說的那樣,在調用.m-files時有兩個選項:將文件複製到當前工作目錄*或*使用'addpath'。據我所知,沒有其他的選擇可以做到這一點,即使是調用文件的'fullpath',然後嘗試'eval'或'feval'也不行。 – Adriaan