IDL中的KEYWORD_SET

时间:2017-09-28 15:40:06

标签: idl-programming-language

我是IDL的新手,发现KEYWORD_SET很难掌握。我明白这是一个不行的转变。我认为这是我遇到困难时的开关。我已经写了一个小程序来掌握这个

Pro get_this_done, keyword1 = keyword1 

WW=[3,6,8]

PRINT,'WW'
print,WW

y= WW*3
IF KEYWORD_Set(keyword1) Then BEGIN  
   print,'y'
   print,y

ENDIF
Return
END

WW打印但print, y受关键字限制。如何敲除关键字以允许y打印。 愚蠢的小问题,但如果有人可以放纵我,那就太好了。

2 个答案:

答案 0 :(得分:1)

编译例程后,键入类似

的内容
get_this_done,KEYWORD1=1b

其中b之后将数值设置为BYTE类型整数(也等同于TRUE)。这应该导致y变量被打印到屏幕上。

KEYWORD_SET函数将为许多不同类型的输入返回TRUE,这些输入基本上已定义或不为零。参数为TRUE时执行IF循环。

答案 1 :(得分:1)

关键字只是作为参数传递给函数:

get_this_done, KEYWORD1='whatever'

get_this_done, /KEYWORD1

将在函数内部为KEYWORD1提供1的INT值。当关键字传递任何类型的值时,KEYWORD_SET函数内部将返回1(TRUE) - 无论它是否有意义。

因此,作为问题的附注:通常建议不要使用KEYWORD_SET,而是采用类型查询:

IF SIZE(variable, /TNAME) EQ 'UNDEFINED' THEN $
  variable = 'default value'

它的优势在于您可以实际检查关键字的正确类型并处理意外甚至不同的变量类型:

IF SIZE(variable, /TNAME) NE 'LONG' THEN BEGIN
  IF SIZE(variable, /TNAME) EQ 'STRING' THEN $
    PRINT, "We need a number here... sure that the cast to LONG works?"
  variable = LONG(variable)
ENDIF