有没有办法让一个函数可以返回两个不同的变量,但一次只能返回一个并知道在函数调用中返回哪一个?
例如: 我有以下功能,其中只有一个输出有效(另一个是[])
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的最新有效值,所以我不能用[]
覆盖其中一个我明白我可以编写一个函数来检查输出哪个变量,但我想知道是否有更优雅的方式。
我希望我的问题清楚,我希望有人能回答我:)。
答案 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)
如果您的函数不介意接受更多输入变量,为什么不将a
和b
作为输入:
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