如果没有请求输出,如何提前退出函数?

问题描述 投票:0回答:1

我正在编写一个具有多个输入和输出的函数。 All 输出仅在不频繁的情况下需要。 此外,一些输入仅用于生成一些不频繁的输出。

一个简化的例子可能会澄清:

function [out1, out2] = foo(inp1, inp2, inp3)
out1 = inp1 + inp2;          % only requires inp1 and inp2
out2 = inp1 + inp2 + inp3;   % requires all inputs
end

如果我运行

a = foo(1, 2);
,我会天真地期望它能起作用:因为不要求
out2
,所以不应该需要
inp3
(并且我希望程序在第一行之后终止)。但是,这会导致错误并停止代码的运行。

我的问题是:规避这个问题的最简单方法是什么?是否有内置功能或已知的设计模式用于缓解此问题?理想情况下,它不需要任何嵌套。类似的例子出现在整个代码的多个地方,因此理想的解决方案也可以重复。


可能的解决方案:

检查输入/输出是可行的,但不适合重复。例如

function [out1, out2] = foo(inp1, inp2, inp3)
out1 = inp1 + inp2;          % only requires inp1 and inp2
if nargout > 1
  out2 = inp1 + inp2 + inp3; % requires all inputs
end
end

如果以这种方式测试多个条件,会导致大量嵌套。

使用

return
可能是解决方案的开始,但并不理想:

function [out1, out2] = foo(inp1, inp2, inp3)
out1 = inp1 + inp2;          % only requires inp1 and inp2
if nargout < 2; return; end
out2 = inp1 + inp2 + inp3;   % requires all inputs
end

(这是最好的方法吗?)

理想的解决方案对于参数的位置也是不变的。例如

[~,b] = baz(1, 2);

function [out1, out2] = baz(inp1, inp2, inp3)
out1 = inp1 + inp2 + inp3;   % requires all inputs
out2 = inp1 + inp2;          % only requires inp1 and inp2
end

也应该运行而不会出现错误。

matlab input return output
1个回答
0
投票

您应该使用内置的“变量参数输入”,

varargin
(文档这里)与
nargin
(文档这里)和“变量参数输出
varargout
(文档这里

function [out1, varargout] = foo(inp1, inp2, varargin)
if nargin < 3
out1 = inp1 + inp2;
else        % only requires inp1 and inp2
varargout{1}= inp1 + inp2 + inp3;   
end
end
© www.soinside.com 2019 - 2024. All rights reserved.