passing whole function expression as function argument
1 次查看(过去 30 天)
显示 更早的评论
hi everyone,
I am trying to create a function that has as an argument another function expression. I can manage to do this:
function [out1] = my_func(in1).
Then I can use a whole function expression as in1 like this:
[out1] = my_func( another_func() ).
So far so good.
My problem arises when the function another_function() has more than one outputs. So when another_func() is something like this:
function [out2 out3] = another_func(in2)
then [out1] = my_func( another_func() ) will only return the first of the outputs of another_func() which is out2.
Is there any way to use the expression [out1] = my_func( another_func() ) and get all outputs of another_func()?
thank you in advance for your help
1 个评论
采纳的回答
Walter Roberson
2015-11-19
Yes, but only in a very restricted context.
If you have an anonymous function A that effectively just calls another function B and B returns multiple outputs, then those multiple outputs will be returned from A.
For example,
my_anonymous_func = @() another_func(in)
then because another_func returns multiple outputs, they will all be returned from my_anonymous_func
I do not know if this is strictly the only sequence it will work in: it might also be possible in the form
function [varargout] = my_func(in1)
[varargout{1:nargout}] = another_func(in1);
5 个评论
Walter Roberson
2015-11-23
The particular form
my_func(@() another_func(in1))
can use any function provided that in1 (or the other parameters) is known before the call to my_func .
If you want a function that takes two functions as inputs, then for example
function out = my_func(data, func1, func2)
out = func2(func1(data));
which could be called as
y = my_func(x, @butter, @cheby1)
The key is passing function handles
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Argument Definitions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!