[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
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                                        [[
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[