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

Re: keyword issue (top 10 IDL request?)



This matter has been discussed here before, and, in fact, is one of the
few that are well covered in the manual. KEYWORD_SET is *only* to be
used to check *status* ot keywords (for "trigger" keywords) that you
either *set* or don't, using "/":

pro temp, plot=plot
if keyword_set(plot) then plot, indgen(10) $
else print, 'No keyword - no plotting!'
end

For KEYWORD_SET, value of zero means "not set", just like /SENSITIVE is
the same as SENSITIVE=1 or SENSITIVE=2, while SENSITIVE=0 means "turn it
off" (for WIDGET_CONTROL procedure).
If your keyword is used to pass (numerical) values, you should, just as
Andy pointed out, use N_ELEMENTS instead of KEYWORD_SET:

pro temp, plot=plot
if n_elements(plot) gt 0 then $
case plot of
0: ; do nothing
1: plot, indgen(10)
2: plot_3dbox, indgen(10), indgen(10), indgen(10)
else: ; do nothing
endcase
end

Cheers,
Pavel


Kenneth Mankoff wrote:
> 
> Hi all,
> 
> here is another thing with current versions of IDL that causes problems
> and confuses me:
> 
> a keyword set to 0 should not be undefined, it should be defined as zero.
> For example:
> 
> IDL> create_globe, lat=90, long=0, ...
> I want create_globe to put longitude 0 at the center of the image (i.e.
> pass "0" to map_set). But if i don't use long= at all, then it should be
> undefined, and the following code should run (inside create_globe)
> IF ( NOT KEYWORD_SET( long ) ) THEN long = 277.5  ;;; geomagnetic pole '98
> 
> However, the above line of code runs even if i set long to "0". I have
> been using long=0.1 as a work-around, but this is an ugly hack that others
> might not think to use.
> 
> any ideas to fix this are welcome, and if no one has any good ideas, then
> please add this to your top ten list, David Fanning.
> 
> Thanks,
>   ken.