假设我有
function [a, b] = foo
a = 1;
b = 2;
并且用户正在呼叫
[~, B] = foo;
我只希望发生b = 2
,以防止进行耗时的操作a = 1
。有没有办法找出用户实际上并未请求a
?
很久以前it was not possible。我想知道Mathworks是否对此进行了改进,还是有人在此期间找到了解决方法。
注意:可能相反:如果用户调用A = foo
,则nargout
为1。
答案 0 :(得分:0)
不可能是有充分理由的。仅仅因为您在函数返回时不需要中间输出,并不表示在函数内 不需要进行中间计算,除非您明确地编写函数。 >
例如,即使未在输出时明确请求,输出3的计算也可能取决于函数内部的输出2。 Matlab无法知道这一点,因此不能假定涉及该输出的任何和所有计算都可以丢弃。
如果您需要一种内存有效的方式来确保仅进行正确的计算,请更改输出策略。
我建议返回一个带有正确字段的结构,您在其中请求函数调用时需要的字段。这样,您的最终结构将只包含所需的字段,并且可以确保函数内部不会发生不必要的计算。