我正在编写一个具有多个输入和输出的函数。 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
也应该运行而不会出现错误。