Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我想做这样的事情:
>> foo = @() functionCall1() functionCall2() 所以当我说: >> foo() 它将执行functionCall1() ,然后执行functionCall2() 。 (我觉得我需要类似C的运算符 ) 编辑: functionCall1和functionCall2不一定是返回值的函数。 回答: 尝试通过命令行执行所有操作而不在m文件中保存函数可能是一项复杂而混乱的工作,但这是我想出的一种方法... 首先,创建您的匿名函数并将其句柄放入单元格数组中 : fcn1 = @() ...; fcn2 = @() ...; fcn3 = @() ...; fcnArray = {fcn1 fcn2 fcn3}; ...或者,如果您已经定义了函数(例如在m文件中),则将函数句柄放置在像这样的单元格数组中: fcnArray = {@fcn1 @fcn2 @fcn3}; 然后,您可以创建一个新的匿名函数,以使用内置函数cellfun和feval调用数组中的每个函数: foo = @() cellfun(@feval,fcnArray); 尽管看起来很有趣,但它确实有效。 编辑:如果需要使用输入参数调用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 警告词: cellfun的文档指出未指定输出元素的计算顺序 ,因此不应依赖该顺序 。这意味着不能保证fcn1在fcn2或fcn3之前得到评估。如果订单很重要,则不应使用上述解决方案。 更多&回答... |
![]() |
![]() |