# Passing in a function as an argument

1.170 views (last 30 days)
Kaloyan Marinov on 18 Apr 2014
Commented: Steven Lord on 24 Jun 2022
Dear all,
I would like to write a Function M-file f.m, which is to contain a primary function called f as well as two subfunctions called subFunc1 and subFunc2, respectively.
Within the primary function f, I need to call subFunc1; what is the proper syntax for passing subFunc2 as an input parameter to such a call of subFunc1?
Any feedback would be very much appreciated.
Regards, Kaloyan

Ted Shultz on 20 Aug 2019
you use the "@" character to pass a function, not the output of a funcitn. This looks like this:
function main
clc
testCode(@sum, [1 2 3]) % calls "testCode" with builtin matlab function "sum"
testCode(@doubleSum, [1 2 3]) % calls "testCode" with custom function defined below
end
function valOut = testCode(funcIn, numIn)
% funcIn is a function passed to this function! you call as you would the passed function:
valOut = funcIn(numIn);
end
function ds = doubleSum(numIn)
ds = 2*sum(numIn);
end
##### 2 CommentsShowHide 1 older comment
Steven Lord on 24 Jun 2022
Comparing functions or function handles is unlikely to be what you want.
Now comparing the results of evaluating a function or function handle, on the other hand, is often useful.
f1 = @sin;
f2 = @(x) cos(pi/2-x);
x = [0 pi 2*pi];
norm(f1(x)-f2(x)) < 1e-6 % Don't use == for floating point comparison
ans = logical
1
Note that directly trying to compare f1 and f2 won't work.
f1 == f2 % error
Operator '==' is not supported for operands of type 'function_handle'.

Stuart Kozola on 18 Apr 2014
To pass in a function to another function, use function handles (@).
sf2 = @(inputs) subFcn2(inputs)
then call it in subFcn1 as
out1 = subFcn1(sf2)
or alternatively
out2 = subFcn1(@subFcn)
Note that you add @ to the function name to declare it as a function (vs. a variable) to be passed into the function.
Now if you have constant parameters that need to be passed into subFcn1, you can define the sf2 as
sf2 = @(input) subFcn(input,param1,param2)
and to call sf2 it only takes in input
out2 = sf2(input)
Note that the constant parameters are already included in the definition of sf2 which only takes in one input.
If you need more explaination or examples, look at the doc:

Azzi Abdelmalek on 18 Apr 2014
a=@subFunc2
Then call your function with a argument
Kaloyan Marinov on 18 Apr 2014
Edited: Kaloyan Marinov on 18 Apr 2014
Do you mean I should pass subFunc2 as an input parameter to a call of subFunc1 it as follows:
a = @subFunc2;
subFunc1(a);
?

Omkar Dumne on 9 Apr 2021
How does matlab help help in passing function arguments