Passing in a function as an argument

458 次查看(过去 30 天)
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

回答(4 个)

Ted Shultz
Ted Shultz 2019-8-20
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 个评论
Abdul Hanan Wali
Abdul Hanan Wali 2022-6-24
and what if we have to compare them. like if ds == valOut it should return true
Steven Lord
Steven Lord 2022-6-24
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
Stuart Kozola 2014-4-18
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
Azzi Abdelmalek 2014-4-18
a=@subFunc2
Then call your function with a argument
  1 个评论
Kaloyan Marinov
Kaloyan Marinov 2014-4-18
编辑:Kaloyan Marinov 2014-4-18
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
Omkar Dumne 2021-4-9
How does matlab help help in passing function arguments

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by