MATLAB Answers

KAE
0

How to check if one of output variables is not called

Asked by KAE
on 16 Aug 2019
Latest activity Edited by KAE
on 20 Aug 2019
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

  0 Comments

Sign in to comment.

1 Answer

Answer by Stephen Cobeldick on 16 Aug 2019
Edited by Stephen Cobeldick on 16 Aug 2019
 Accepted 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:

  2 Comments

Sorry I missed those answers. Checking for non-called outputs seems useful so I will put in a feature request.
In response to my feature request, Matlab support provided a workaround adding some flag arguments to control which output should be calculated:
function [out1, out2, out3] = example(in1, in2, flag)
%define all outputs%
out1 = -1;
out2 = -1;
out3 = -1;
%calculate the output according to flag%
if flag(1) == 1
out1 = 1;
end
if flag(2) == 1
out2 = 1;
end
if flag(3) == 1
out3 = 1;
end
end
To invoke the function:
%here, skip output2%
[a, ~, c] = example(11, 22, [1,0,1])

Sign in to comment.