[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: passing functions as arguments in IDL?
- Subject: Re: passing functions as arguments in IDL?
- From: davidf(at)dfanning.com (David Fanning)
- Date: Tue, 29 Feb 2000 07:50:44 -0700
- Newsgroups: comp.lang.idl-pvwave
- Organization: Fanning Software Consulting
- References: <38971B2F.8577EBB6@hpl.hp.com> <MPG.1300d5762a6bdf7989a07@news.frii.com> <38BBD595.291B0783@mpipsykl.mpg.de>
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:18715
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