# Re: Multiple values from a function?

• Subject: Re: Multiple values from a function?
• From: Martin Schultz <martin.schultz(at)dkrz.de>
• Date: Tue, 04 Jul 2000 21:20:42 +0200
• Newsgroups: comp.lang.idl-pvwave
• Organization: MPI fuer Meteorologie
• References: <3961EFA8.49657FB6@mathstat.dal.ca>
• Xref: news.doit.wisc.edu comp.lang.idl-pvwave:20115

Simon de Vet wrote:
>
> I have a function that does a whole lot (it started out as an
> independent program). It works very well when returning one of it's
> calculated arrays.
>
> It also produces a number of other arrays which I'd like to have access
> to.  Unfortunately, I have discovered that a function can only return
> one value.
>
> How can I get the other arrays out of it? The code is intertwined, so it
> would be hard to break into 2 or 3 independent functions.
>
> Concatenation of arrays is not an option, since they are all of
> different sizes.  I can get around the problem by doing the calculation
> in the main level program instead of in a function, but that's a little
> ackward. Looking at the help, structures look like a possibility, but I
> don't understand how they work.
>
> Help!
>
> Simon

Second alternative: store all your results in a structure. Example:

function mything, in1, in2

sum=in1+in2
diff=in1-in2

result = { sum:sum, diff:diff }
return,result
end

You can then access the results as in:
thunder = mything(5.,20.)
print,'Sum is : ',thunder.sum,'   Difference is : ',thunder.diff

One addition to Craig's answer: the parameter could also be a keyword,
e.g.
function mything, in, out=out

This is particularily recommended if you judge the output as optional.
In this case
you can use the arg_present function to determine whether output shall
be computed or not:

...
if arg_present(out) then begin
;; long-winded computation worth at least 3 trips to coffee maker
...
endif

Cheers,
Martin
--
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
[[ Dr. Martin Schultz   Max-Planck-Institut fuer Meteorologie    [[
[[                      Bundesstr. 55, 20146 Hamburg             [[
[[                      phone: +49 40 41173-308                  [[
[[                      fax:   +49 40 41173-298                  [[
[[ martin.schultz@dkrz.de                                        [[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[