How to check if one of output variables is not called

25 Ansichten (letzte 30 Tage)
KAE am 16 Aug. 2019
Bearbeitet: KAE am 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;
if ~isempty(varargout{2}) % Only calcluate if 2nd output is called
varargout{2} = x*y;

Akzeptierte Antwort

Stephen23 am 16 Aug. 2019
Bearbeitet: Stephen23 am 16 Aug. 2019
You can use nargout to detect how many output arguments are requested:
if nargout>0
varargout{1} = x+y;
if nargout>1
varargout{2} = x*y;
There is no direct way to detect which of those outputs are allocated to variables:
  2 Kommentare
KAE am 20 Aug. 2019
Bearbeitet: KAE am 20 Aug. 2019
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;
if flag(2) == 1
out2 = 1;
if flag(3) == 1
out3 = 1;
To invoke the function:
%here, skip output2%
[a, ~, c] = example(11, 22, [1,0,1])

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)


Find more on Argument Definitions in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by