MATLAB: Functions as function inputs with specified inputs

function handlefunctions as input argumentsMATLABmatlab function

I am trying to create a code e.g.:
function Y=evaluator(a,b,c,d,e,f,g,function1)
Y=function1(a,b,c,d,e,f,g);
end
such that I can input any .m file as an input argument (for function1) and it would be evaluated with the input arguments (a,b,c,d,e,f,g). In other words, I want to have the code evaluate (say) any ..m file that has 7 input arguments in this code.
My issue is that I get the "Not enough input arguments" Error every time I try to run this, even though function11.m has 7 input variables. Yet if I call up the .m files from the Command Window – i.e. function11(a,b,c,d,e,f,g) – it runs perfectly. What's more, changing Y=function1(a,b,c,d,e,f,g); back to Y=function11(a,b,c,d,e,f,g); (the actual .m file name – as I had before trying to do this, which worked before), the error still pops up and there is nothing I can do about it.
I have also tried using:
Y=feval(function1(a,b,c,d,e,f,g));
with the same result.
Any suggestions/comments?

Best Answer

You need to pass the function handle, because what you are doing now calls the function when you try to input it to evaluator. For example you could do this, where fun is the name of your function:
evaluator(...,@fun)
not this:
evaluator(...,fun)
Also note that you could easily write evaluator so that it accepts any number of input arguments:
>> evaluator = @(fun,varargin)fun(varargin{:});
>> evaluator(@max,[1,2,3],2)
ans =
2 2 3
Although to be honest writing a special wrapper function to evaluate functions is a total waste of time: once you have a function handle you can just as easily call that handle directly, no wrapper is required:
>> fun = @max;
>> fun([1,2,3],2)
ans =
2 2 3
You would be much better off learning how to use function handles properly, rather than wasting your time with this pointless evaluator function: function handles can be evaluated directly, they do not need some special wrapper to do it. Use function handles: that is exactly what they are for!