MATLAB: How to check if one of output variables is not called

nargoutvarargout

If I have a function which can return multiple outputs, how can I tell from inside the function that some of the output variables are not called? One application is skipping a long calculation of an unused output variable.
Here is a non-working example. Can it be made to work?
% This would perform both calculations
[addIt, multIt] = test_empty_function_outputs1(2,3);
% This would only perform the addition to get the 1st output
[addIt, ~] = test_empty_function_outputs1(2,3);
% This would only perform the multiplication to get the 2nd output
[~, multIt] = test_empty_function_outputs1(2,3);
function varargout = test_empty_function_outputs1(x,y)
if ~isempty(varargout{1}) % Only calculate if 1st output is called
% Gives an error: Undefined function or variable 'varargout'
varargout{1} = x+y;
end
if ~isempty(varargout{2}) % Only calcluate if 2nd output is called
varargout{2} = x*y;
end

Best Answer

You can use nargout to detect how many output arguments are requested:
if nargout>0
varargout{1} = x+y;
end
if nargout>1
varargout{2} = x*y;
end
There is no direct way to detect which of those outputs are allocated to variables: