[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: passing functions as arguments in IDL?



Benno Puetz (puetz@mpipsykl.mpg.de) writes:

> David Fanning wrote:
> 
> > Rick Baer (baer@hpl.hp.com) writes:
> >
> > >  Is there any way to pass functions as arguments in IDL? I would
> > > like to be able to do something like this:
> > >...
> > > IDL> print, tf1, f1, 4
> >
> > You can do this:
> >
> >  function f1, x
> >     return, x*x
> >  end
> >
> >  function tf1, func, arg
> >    IF Size(func, /Type) NE 7 THEN BEGIN
> >         Print, 'String argument required'
> >        RETURN, -1
> >    ENDIF
> >     retVal = Call_Function(func, arg)
> >    return, retVal
> >  end
> >
> >    IDL> print, tf1('f1', 4)
> >
> > Cheers,
> >
> > David
> > --
> 
> Would it also be possible to pass argument lists of variable length,
> depending on the function to be called?
> 
> I've tried the _EXTRA keyword but to no avail ...

If those arguments are *keywords* I should imagine _Extra
will work: :-)

   function f1, x, Multi=multi
        if n_elements(multi) eq 0 then multi=2
   return, x*multi
   end

   function tf1, func, arg, _Extra=extra
   IF Size(func, /Type) NE 7 THEN BEGIN
      Print, 'String argument required'
      RETURN, -1
   ENDIF
   retVal = Call_Function(func, arg, _Extra=extra)
   return, retVal
   end

   IDL> print, tf1('f1', 4, Multi=3)
        12
   IDL> print, tf1('f1', 4, Multi=6)
        24

Cheers,

David

-- 
David Fanning, Ph.D.
Fanning Software Consulting
Phone: 970-221-0438 E-Mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155