Недавно я столкнулся с подобной проблемой и нашел следующее решение для пакетов. Однако это ОЧЕНЬ хакерский.
Вы создаете функцию с именем import this с необязательным аргументом.
function to_eval = importthis(exclude_list)
if nargin == 0
exclude_list = [];
end
var_name = genvarname('A', exclude_list); %avoid shadowing
to_eval = ['[~,'...
, var_name...
, ']=fileparts(fileparts(mfilename(''fullpath'')));'... %get containing dir
, 'eval([''import '','...
, var_name...
, '(2:end),''.*'']);'... %remove '+'
, 'clear '... %clean up
, var_name
];
end
Эта функция возвращает строку, которая затем может быть eval
ed, которая импортирует пакет "this". Таким образом, в ваших функциях пакета вы должны поместить в верхнюю часть следующее:
function B = myfunc(A)
eval(importthis);
%function body
end
Вы также можете передать who
в importhis
, оставив пространство имен вашей функции чистым.
function B = myfunc(A)
eval(importthis(who));
%function body
end
Я не могу решить, должен ли я гордиться или обсуждать то, что я сделал.