Passing in a function as an argument
282 views (last 30 days)
Show older comments
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
0 Comments
Answers (4)
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 Comments
Abdul Hanan Wali
on 24 Jun 2022
and what if we have to compare them. like if ds == valOut it should return true
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
Note that directly trying to compare f1 and f2 won't work.
f1 == f2 % error
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:
0 Comments
See Also
Categories
Find more on Dates and Time in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!