Я бы хотел, чтобы функция (например, функция соответствия) возвращала анонимную функцию (обычно хранящуюся в struct
), которую я могу сохранить и использовать позже.Однако передача @func
имеет тенденцию передавать указатель на функцию, а не саму функцию. Является ли встроенная функция
единственным способом сделать это? Я бы хотел избежать inline
, потому что он очень медленный.
Если этот вопрос неясен, вот пример проблемного кода: я пишу файл testFunc.m
в некотором PATH
%testFunc.m
function myfunc = testFunc()
myfunc = @(x) x.^2;
end
, а затем сохраняю функцию в структура
. (Я знаю, что это действительно должен быть объект!)
>> mystruct = struct;
>> mystruct.func = testFunc()
>> mstruct.x = [1 2 3];
>> save('myfile.mat','mystruct')
>> mystruct.func(mystruct.x)
ans =
1 4 9
Если я переместу myfile.mat
или testFunc.m
и загрузю myfile.mat
, я не может загрузить старую структуру. Вместо этого я получаю сообщение об ошибке:
>> cd 'otherdir'
>> load('../myfile.mat')
Warning: Could not find appropriate function on path
loading function handle PATH/testFunc.m>@(x)x.^2
Я знаю, что существует проблема, потому что, если я проверю functions
>> functions(mystruct.func)
ans =
function: '@(x)x.^2'
type: 'anonymous'
file: 'PATH/testFunc.m'
workspace: {2x1 cell}
Есть ли способ удалить информацию о рабочей области файла? встроенные
функции - единственное решение?