Передача имени функции в качестве аргумента в MATLAB

Я знаю, что этот вопрос уже задавали и отвечали здесь, но я не могу заставить его работать.

У меня есть простая функция f1:

function out = f1(x)
out = x^2 + 5;
end

и я хочу иметь функцию "делегат", которая принимает имя функции в качестве входных данных. Ниже вы можете увидеть мои 2 испытания:

% function out = delegate_function(the_input , func_handle)
% out = func2(the_input, func_handle);
% end

function out = delegate_function(the_input , funcname)
thefunc = str2func(funcname);
out = thefunc(the_input);
end

Они оба выдают ту же ошибку, когда я вызываю это в командном окне:

delegate_function(2 , f1); % I want ans = 9

Error using f1 (line 2)
Not enough input arguments.

Что я делаю неправильно?

Спасибо за любую помощь!

1 ответ

Решение

Чтобы версия выше работала, вы должны передать имя функции, которая

delegate_function(2 , `f1`);

Я настоятельно рекомендую использовать вместо этого дескриптор функции:

function out = delegate_function(the_input , func_handle)
out = func_handle(the_input);
end

Тогда вам нужно позвонить delegate_function с помощью:

delegate_function(2 , @f1);
Другие вопросы по тегам