f.m:
function [] = f(the_only_argument)
% Do awesome things here
end
g.m:
function [value] = g(the_only_argument)
% Do awesome things here
value = awesome_value;
end
是否存在某种ReturnsNothing,例如:
assert(ReturnsNothing(@f) & ~ReturnsNothing(@g))
第页。S.我希望能够调用arrayfun(@f, [1,1,1])
,它目前返回一个错误:
??? Error using ==> f
Too many output arguments.
nargout('f')
和nargout('g')
能满足您的需要吗?
如果函数的输出参数数量可变,请小心,因为对于这种特殊情况,nargout
将返回负数。
第二部分
arrayfun(@f, [1,1,1])
抛出上面的错误,因为f
没有定义输入,arrayfun
将为数组中的每个值调用f
(使用该值作为输入(。因此该误差与CCD_ 9 引起的误差相同
如果您需要在arrayfun
中运行一个不接受输入的函数,您可以将其封装在一个匿名函数中,该函数将丢弃输入
例如
arrayfun(@(~)f,[1,1,1])
不会导致错误,因为arrayfun
不需要输出
第一部分
nargout
可以在函数之外使用,通过传递包含函数名称的字符串来检查它有多少定义的输出
例如,使用问题中的函数
nargout('f')
ans =
0
nargout('g')
ans =
1
此外,如果存在varargout
,则将其计数为单个输出,但返回负值以指示其存在
例如具有以下功能
function [value,varargout] = h()
...code
end
它返回
nargout('h')
ans =
-2