MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何在MATLAB匿名函数中执行多个语句? (https://www.labfans.com/bbs/showthread.php?t=22607)

poster 2019-12-10 16:49

如何在MATLAB匿名函数中执行多个语句?
 
我想做这样的事情:

>> foo = @() functionCall1() functionCall2() 所以当我说:

>> foo() 它将执行functionCall1() ,然后执行functionCall2() 。 (我觉得我需要类似[URL="http://www.eskimo.com/~scs/cclass/int/sx4db.html"]C的运算符[/URL] )

编辑:

functionCall1和functionCall2不一定是返回值的函数。


回答:
尝试通过命令行执行所有操作而不在m文件中保存函数可能是一项复杂而混乱的工作,但这是我想出的一种方法...

首先,创建您的[URL="http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html"]匿名函数[/URL]并将其[URL="https://www.mathworks.com/help/matlab/function-handles.html"]句柄[/URL]放入[URL="https://www.mathworks.com/help/matlab/cell-arrays.html"]单元格数组中[/URL] :

fcn1 = @() ...; fcn2 = @() ...; fcn3 = @() ...; fcnArray = {fcn1 fcn2 fcn3}; ...或者,如果您已经定义了函数(例如在m文件中),则将函数句柄放置在像这样的单元格数组中:

fcnArray = {@fcn1 @fcn2 @fcn3}; 然后,您可以创建一个新的匿名函数,以使用内置函数[URL="https://www.mathworks.com/help/matlab/ref/cellfun.html"]cellfun[/URL]和[URL="https://www.mathworks.com/help/matlab/ref/feval.html"]feval[/URL]调用数组中的每个函数:

foo = @() cellfun(@feval,fcnArray); 尽管看起来很有趣,但它确实有效。

[B]编辑:[/B]如果需要使用输入参数调用fcnArray的函数, fcnArray首先必须确保数组中的所有函数都需要相同数量的输入。在这种情况下,下面的示例演示如何使用每个输入参数调用函数数组:

foo = @(x) cellfun(@feval,fcnArray,x); inArgs = {1 'a' [1 2 3]}; foo(inArgs); %# Passes 1 to fcn1, 'a' to fcn2, and [1 2 3] to fcn3
[B]警告词:[/B] [URL="https://www.mathworks.com/help/matlab/ref/cellfun.html"]cellfun[/URL]的文档指出未指定输出元素的计算[I]顺序[/I] ,因此不应依赖该[I]顺序[/I] 。这意味着不能保证fcn1在fcn2或fcn3之前得到评估。如果订单很重要,则不应使用上述解决方案。



[url=https://stackoverflow.com/questions/558478]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:44

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.