KILLコマンドは、ローカルまたはグローバル変数とその下位ノードを削除します。
KILLコマンドのフォーマットは:
K[ILL][:tvexpr] [glvn | (glvn[,...]) | *lname | *lvn ]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
オプションのグローバルまたはローカル変数名は、削除するための変数を指定します; KILLは、引数で指定された変数だけでなく、その変数から降りてくるすべての変数も削除します、すなわち、それらはキーの接頭辞(key-prefix)が同一で始まるものです。
現在存在しない変数を KILLしても効果はありません。
引数なしのKILLコマンドは、現在の既存のローカル変数のすべてを削除します; この場合、行の中で次のコマンドと区別するために、KILLに続き少なくとも2つのスペースが必要です。
KILLの引数が括弧で囲まれたローカル変数名で構成されている場合、引数にリストされているこれらを除き、 その "排他的" KILL は、すべてのローカル変数を削除します。
KILLは、NEWまたは次のような可能な例外をパラメータパッシングによって "スタック" されているローカル変数のコピーには影響しません。
括弧で囲まれたKILLの引数では、もしそうでない除外リストで明示的または暗黙的な(参照渡し)のエイリアスを持っていた場合に、環境変数 gtm_stdxkill は、除外リスト内のローカル変数をkillするために、標準準拠の動作が可能になります。デフォルトでは、この動作は無効になっています。もし gtm_stdxkillが 1 または "TRUE" または "YES" にセットされている場合、そのすべての名前がかっこで括られたリストにない限り、KILLはローカル変数を削除します。もし gtm_stdxkill が定義されていない、または、0 がセットされている場合、KILLの操作は、その名のいずれかが括弧付きリストに現れている場合、アイテムに関連付けられているデータを除外します。非標準としても、デフォルトの動作は、参照呼び出し(call-by-reference)関数、または、呼び出し側のパラメータの必要な知識からエイリアスを使用している関数を、切り離さします。
M標準仕様に準拠して、formallist 変数に参照渡しによって結合された変数のKILL は、formallist 変数が排他的KILLによって保護され指定されていとしても、actuallist 変数がKILLされたときには、 formalist変数を常にKILLします。
KILL * は、その引数と関連する配列の間の関連付けを削除します。引数は、標準 KILL と同様に、未定義のまま残っています。もし配列が KILL * の後に関連付けがなったく残っていない場合、GT.Mは、それが占有しているメモリを再利用できます。配列もなくKILL * に関連付けもない場合は、幸せにして静かに何もしません。
エイリアスコンテナ変数のKILL * は、エイリアス変数のKILLと同様であり、lvn と配列の間の関連付けを削除します。
KILL * は、エイリアスの関連付けを削除することで、エイリアス変数のような参照渡しと同じにもかかわらず、フォームされたエイリアスを扱います。
引数なしで KILL * をすると、すべてのエイリアスとエイリアスのコンテナの接続を削除します。
引数リストの中で KILL と KILL * とを混在できます。例えば、KILL *A,B
Kill * は、除外の括弧リスト内では許可されません。 例えば:KILL(*A) はエラーになります。
1つの関連する名前が除外の括弧リスト内にあり、別の関連付けられた名前がそのリストにはないその排他的KILLは、リスト内にない名前を介して配列をkillします。関連付けは、しかし、保たれています。
エイリアス変数の詳細とKILL * の参考例は、 " エイリアス変数の拡張 " を参照してください。
間接指定演算子と1つ以上のKILLの引数リストに評価される原子式(expression atom)は、KILLのための正当な引数を構成します。
注意 | |
---|---|
プロセスの環境(ローカル変数)または共有データ(グローバル変数)に大きな影響を及ぼすことができるので、注意してKILLを使用してください。 |
例:
GTM>Kill Set a=0,a(1)=1,a(1,1)="under" KILL a(1) ZWR a=0 GTM>
これは、既存のすべてのローカル変数を削除することによって、"新鮮なスタート" を得るために、引数なしのKILLを使用しています。 a、a(1)、a(1,1) のSETの後に、KILLは a(1)とその下位ノードを削除します。 ZWRITEで残っている変数を表示します。
例:
GTM>Kill (a,b),^AB(a,b)
最初の引数(排他的KILL)は、aとbを除くすべてのローカル変数をKILL するために指定します。2番目の引数は、^AB(a,b)とその下位のグローバル変数のノードを削除します。
例:
kill * write !,"gtm_stdxkill=",+$ztrnlnm("gtm_stdxkill"),! set (A,B,C,E)="input" do X(.A,.B) zwrite write !,"____________",! set (A,B,C,E)="input" do Y(.A,.B) zwrite write !,"____________",! set (A,B,C,E)="base" set *C=A,*D=B kill (C,D) zwrite quit X(C,D) set (C,D)="output" kill (C,D) quit Y(C,D) set (C,D)="output" [参考] kill (C,D) quit
以下の出力を作ります:
gtm_stdxkill=0 A="output" B="output" C="input" ____________ A="output" B="output" C="input" ____________ A="base" ;* B="base" ;* *C=A *D=B