2017-09-28 9 views
0

私はIDLが新しく、KEYWORD_SETがわかりにくいことがわかりました。私はそれが碁のスイッチであることを理解する。私はそのノッキングのオンとオフの部分は私が難しかったと思う。私は、このような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が印刷できるようにするには、どうすればキーワードを削除できますか? 愚かな小さな質問ですが、もし誰かが私を甘やかすことができれば、それは素晴らしいでしょう。ルーチンをコンパイルした後

答えて

0

b

get_this_done,KEYWORD1=1b 

ようなタイプの何か一つが(TRUEにも相当)​​型整数に数値を設定した後。これにより、y変数が画面に表示されるはずです。

KEYWORD_SET関数は、基本的に定義されているかゼロでない多くの異なるタイプの入力に対してTRUEを返します。 IFループは、引数がTRUEのときに実行されます。

1

キーワードは、単に関数の引数として渡される。

get_this_done, KEYWORD1='whatever' 

又はも

get_this_done, /KEYWORD1 

を関数内KEYWORD1 1のINT値を与えるであろう。 KEYWORD_SET関数の内部では、意味をなさないかどうかにかかわらず、キーワードが何らかの値を渡されたときに1(TRUE)を返します。

そこで質問へのサイドノートとして:それはあなたが実際に正しいタイプを確認することができるという利点がある

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

:多くの場合、KEYWORD_SETを使用しないことをお勧めしますが、代わりにタイプのクエリに頼ります予期しない変数や異なる変数の型を処理することができます:

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