Вероятно, проблема в том, что ваш текущий каталог (pwd
) не совпадает с расположением файла. Относительный каталог не относится к текущему сценарию, он относится к pwd
, поэтому обходной путь mfilename
решает вашу проблему.
Первое решение - ваше, но вы можете сделать это в одну строку:
addpath( fullfile( fileparts( mfilename('fullpath') ), 'utilities' ) );
Тогда самый быстрый способ проверить, что ваши файлы уже находятся на пути, это использовать which
:
% Assuming that myFile.m is within the utilities folder, and not shadowed elsewhere.
% If utilities is on the path, which('myFile') will not be empty.
if isempty( which( 'myFile' ) )
addpath( fullfile( fileparts( mfilename('fullpath') ), 'utilities' ) );
end
В качестве альтернативы, вы можете связать вышеупомянутую проверку с переменной флага persistent
, так что вам не придется повторять проверку, если вы снова вводите функцию.
Обратите внимание, что addpath
не особенно медленный, это genpath
, которого вы хотите избежать, если бы вы также добавили загрузку подкаталогов.
В сторону: лучше использовать fullfile
вместо ручной конкатенации с (зависящими от ОС) разделителями файлов. Меньше места для ошибок (например, двойной косой черты), даже если вы всегда используете одну и ту же ОС.