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

Re: keyword issue (top 10 IDL request?)

Kenneth Mankoff wrote:
> 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.

I like to make a clear distinction between keywords which are used to
supply a value, and keywords which represent a Boolean flag.

To check a keyword which supplies a value (as in your case), and set a
default value if the keyword is undefined:

if (n_elements(key_value) eq 0) then key_value = -999.9

To check a keyword which represents a Boolean flag:

if keyword_set(key_boolean) then print, 'True'
if (keyword_set(key_boolean) eq 1) then print, 'True'
if (keyword_set(key_boolean) eq 0) then print, 'False'

If you wish to pass a Boolean keyword from inside your
procedure/function another procedure or function:

myfunc, arg1, arg2, key=keyword_set(key_boolean)