我想在匿名函数中调用某个函数,如
@(){fooBar(baz)}
麻烦的是,fooBar
没有输出,这使得匿名函数抱怨。除了使fooBar
函数返回虚拟输出之外,有没有办法解决这个问题?
答案 0 :(得分:5)
问题在于您的匿名函数定义。通过将函数foobar(baz)
括在字符{...}
之间,您正在编写一个函数,该函数必须:
foobar(baz)
cell
显然在步骤(2)中,Matlab不能将表达式(1)的结果放在单元格中,因为(1)没有输出。
所以只需在没有大括号的情况下定义你的函数:
myFunction = @() fooBar(baz)
一切都应该正常。
为了演示一个例子,让我们通过做一些不产生输出的东西来定义函数fooBar
(例如改变斧头限制):
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)
底线:如果某个函数没有输出,请不要尝试将此输出重定向到变量或表达式。