具有不同返回变量的函数

时间:2016-07-01 10:30:19

标签: matlab

有没有办法让一个函数可以返回两个不同的变量,但一次只能返回一个并知道在函数调用中返回哪一个?

例如: 我有以下功能,其中只有一个输出有效(另一个是[])

function [a,b] = AlternatingOutput (input)
    if input == 1
        return ONLY A
    else
        return ONLY B
    end
end

我在脚本中调用它

[a,b] = AlternatingOutput (input)

我想要一种方式来说明以下(伪代码):

if (function outputs a)
    [a,~] = AlternatingOutput(input)
elseif (function outputs b)
    [~,b] = AlternatingOutput(input)
end

脚本在循环中运行,后来我需要a和b的最新有效值,所以我不能用[]

覆盖其中一个

我明白我可以编写一个函数来检查输出哪个变量,但我想知道是否有更优雅的方式。

我希望我的问题清楚,我希望有人能回答我:)。

4 个答案:

答案 0 :(得分:4)

无法判断是否实际使用了输出参数。您可以使用nargout检查输出参数的数量,以便区分[a] = AlternatingOutput(input)[~,b] = AlternatingOutput(input)

我不知道你的问题的完整上下文,但也许你可以将所有变量放入结构中?每次调用函数时,只需传递此结构,并让它决定要操作哪些变量。 (在某些编程语言中这可能很慢,但在matlab中则不然。)

答案 1 :(得分:0)

如何重新调整细胞?

function [ ab ] = testfun( input )
if input
    ab={'ax'};
else
    ab={2};
end
end

不用担心细胞内有什么。

你可以返回你想要的东西,Matlab不会检查类型

答案 2 :(得分:0)

如果AlternatingOutput函数中只有一个输出有效,那么您只需要返回一个输出:

function [X] = AlternatingOutput(input)
    if input == 1
        X = A; 
    else
        X = B;
    end
end

要将循环值分配给循环中的a或b,请将它们放入单元格中:

C = {AlternatingOutput(1), AlternatingOutput(2)};

然后使用输入来确定哪个值发生了变化。如果输入为1或2,则可以执行

for counter = ...
    input = mod(input,2)+1;
    C{input}=AlternatingOutput(input);
end

答案 3 :(得分:0)

如果您的函数不介意接受更多输入变量,为什么不将ab作为输入:

function [a,b] = AlternatingOutput(a,b,input)
    if input == 1
        a = new_value_for_a;
        % b retains its former value
    else
        % a retains its former value
        b = new_value_for_b;
    end
end

然后可以在循环中从脚本中轻松调用它:

for i= ...
    [a,b] = AlternatingOutput(a,b,input);
    ...
    ...
end