Передача и сохранение анонимной функции в matlab

Я бы хотел, чтобы функция (например, функция соответствия) возвращала анонимную функцию (обычно хранящуюся в 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}

Есть ли способ удалить информацию о рабочей области файла? встроенные функции - единственное решение?

9
задан Arthur Ward 2 October 2012 в 15:01
поделиться