How do I get the second return value from a function without using temporary variables?

I have a function that returns two values, like so:

[a b] = myfunc(x)

Is there a way to get the second return value without using a temporary variable, and without altering the function?

What I'm looking for is something like this:

abs(secondreturnvalue(myfunc(x)))

Answers


Unless there is some pressing need to do this, I would probably advise against it. The clarity of your code will suffer. Storing the outputs in temporary variables and then passing these variables to another function will make your code cleaner, and the different ways you could do this are outlined here: How to elegantly ignore some return values of a MATLAB function?.

However, if you really want or need to do this, the only feasible way I can think of would be to create your own function secondreturnvalue. Here's a more general example called nth_output:

function value = nth_output(N,fcn,varargin)
  [value{1:N}] = fcn(varargin{:});
  value = value{N};
end

And you would call it by passing as inputs 1) the output argument number you want, 2) a function handle to myfunc, and 3) whatever input arguments you need to pass to myfunc:

abs(nth_output(2,@myfunc,x))

not that i know of. subsref doesn't seem to work in this case, possibly because the second variable isn't even returned from the function.

since matlab 2009b it is possible to use the notation

[~, b] = function(x) 

if you don't need the first argument, but this still uses a temporary variable for b.


Need Your Help

Target IE7 with jQuery

jquery internet-explorer-7 browser-detection

I am trying to target IE7 with an if statement in a jQuery function. My code to this specific bit is:

How do you create tests for "make check" with GNU autotools

unit-testing language-agnostic automated-tests autotools

I'm using GNU autotools for the build system on a particular project. I want to start writing automated tests for verifcation. I would like to just type "make check" to have it automatically run th...