[英]Matlab: Call function that has no outputs from an anonymous function
我想从匿名函数中调用某个函数,例如
@(){fooBar(baz)}
麻烦的是, fooBar
没有输出,这使匿名函数抱怨。 除了使fooBar
函数返回虚拟输出之外,还有其他方法吗?
问题出在您的匿名函数定义中。 通过将函数foobar(baz)
在字符{...}
,您正在编写必须具有以下功能的函数:
foobar(baz)
cell
显然,在步骤(2)中,Matlab无法将表达式(1)的结果放入单元格中,因为(1)没有输出。
因此,只需定义没有花括号的函数即可:
myFunction = @() fooBar(baz)
一切应该正常。
为了举例说明,让我们通过做一些不产生输出的事情来定义函数fooBar
(例如,更改ax限制):
fooBar = @(axlim) set(gca,'XLim',axlim)
我现在可以调用fooBar([0 20])
,并且当前轴将直接将其轴限制设置为[0 20]
如果有一个我经常使用的轴跨度(例如[-5 5]),我很想定义一个新函数,该函数将始终使用相同(经常使用)的参数调用fooBar
:
fooBarPrefered = @() fooBar([-5 5])
现在,每次我调用fooBarPrefered()
,我的轴X限制都直接设置为[-5 5]。
为了进一步说明这一点,由于调用fooBar([-5 5])
不会产生输出,因此如果我用花括号定义函数,Matlab的确会抱怨:
fooBarPrefered = @() {fooBar([-5 5])} ;
>> fooBarPrefered()
One or more output arguments not assigned during call to "set".
Error in @(axlim)set(gca,'XLim',axlim)
Error in @(){fooBar([-5,5])}
但是请注意,与尝试将fooBar
的输出直接分配给工作空间中的变量时,这是相同的错误:
a = fooBar([0 20])
One or more output arguments not assigned during call to "set".
Error in @(axlim)set(gca,'XLim',axlim)
底线:如果函数没有输出,请勿尝试将此输出重定向到变量或表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.