Передача имени функции в качестве аргумента в 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);