如何确定Matlab函数是否返回值?

时间:2014-06-10 15:44:10

标签: matlab reflection metaprogramming

f.m:<​​/ p>

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))

P.S。我希望能够调用当前返回错误的arrayfun(@f, [1,1,1])

??? Error using ==> f
Too many output arguments.

2 个答案:

答案 0 :(得分:5)

nargout('f')nargout('g')能做你需要的吗?

如果您的函数具有可变数量的输出参数,请注意,因为nargout将为该特殊情况返回负数。

答案 1 :(得分:3)

第二部分

arrayfun(@f, [1,1,1])抛出上述错误,因为f没有定义输入,arrayfun将为数组中的每个值调用f(使用该值作为输入)。所以错误与f(1)

引起的错误相同

如果你需要一个在arrayfun中运行但不接受输入的函数,你可以将它包装在一个匿名函数中,该函数会输入输入。
例如

arrayfun(@(~)f,[1,1,1])

不会导致错误,因为 arrayfun不需要输出!

第一部分

nargout可以在函数外部使用,通过传递包含函数名称的字符串来检查它有多少定义的输出

e.g。使用问题中的函数

nargout('f')

ans =

     0

nargout('g')

ans =

     1

此外,如果varargout存在,则将其计为单个输出,但返回负值以指示其存在

例如使用以下函数

function [value,varargout] = h()
...code
end

它返回

nargout('h')

ans =

     -2