QUITがFORの後の行に現れる場合を除いて、QUITコマンドは、DO、XECUTE、外部関数または特殊変数によって初期化される現在のGT.M呼び出しスタックレベルの実行を終了し、次の "低" レベルに制御を戻します。この場合、QUITはNEW、または、パラメータパッシングにより、現在のレベルでスタックの値を復元します。 QUITコマンドは、同じ行で最も近いFORコマンドで終了します。 Mは、FORが最も異なっている、DO、FOR、XECUTE、外部関数($$)を終了するために、QUITコマンドをオーバーロードすることに、注意してください。
QUITコマンドのフォーマットは:
Q[UIT][:tvexpr] [expr | *lname | *lvn]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
QUITが外部関数を終了すると、それは関数から返される値を供給する引数を持っている必要があります;他のすべてのケースでは、QUITは引数があってはならず、そして、行の中で次のコマンドと区別するために、コマンドに続き少なくとも2つのスペースが必要です。
間接指定演算子とQUITの引数に評価される原子式(expression atom)は、QUITのための正当な引数を構成します。
添字のない lvn(lname)は配列のルートを指定し、添字のある lvn はエイリアス・コンテナを指定する必要があります。
QUIT * が外部関数または外部特殊変数を終了すると、常にエイリアス・コンテナを返します。もし lvn がエイリアスではない lname の場合、QUIT * はエイリアス・コンテナを作成します。エイリアス変数に詳細と参考例は、 " エイリアス変数の拡張 " を参照してください。
QUITは、そのコンテキストに応じて、2つの似ているが異なる機能を実行します。FORは、GT.Mの呼び出しスタックにレベルを追加しないため、FORループが単純にループを終了する内側でQUITします。DO、XECUTE と外部関数が終了するそのQUITはmmm、GT.Mの呼び出しスタックレベルを削除します、したがって、以前のNEWやパラメータパッシングに起因するローカル変数の環境を調整することができます。外部関数から、または、引数なしDOによって作成されたフレームからのQUITは、そのスタックされた値で$TESTが復元されます。
間接演算子とQUIT引数を評価する原子式(expression atom)は、FOR以外のQUITの正当な引数を形成します。
そのコードがTCOMMITでまだ一致していないTSTARTを発行した後に、DO、XECUTE、または外部によって呼び出されたコードからの QUIT(暗黙的または明示的)を試みることは、エラーが発生します。
例:
Do A Quit A Write !,"This is label A"
ラベル Aに先行する行での明示的なQUITは、行 A が2回の実行することを防ぎます。ラインAでのサブルーチンは、ルーチンの終了時に暗黙のQUITで終了します。
例:
Write $$ESV Quit ESV() QUIT "value of this Extrinsic Special Variable"
ラベルESVが(空である)引数リストがあるため、GT.Mは、唯一正当的に、外部呼び出しでそのラベルに到達することができます。2行目のQUITは、誤ってESV ラベルの行 "を通って落ちる" ことから実行を防ぎます。ESVは特殊変数を実装するサブルーチンを識別するので、ESVの後の行のQUITは、外部の値を提供する引数を持っています。
例:
Set x="" For Set x=$Order(^BAL(x)) Quit:x]]"AR5999"!'$Length(x) DO STF
後置条件QUITは、FORループを終了します。それには引数がないので、QUIT後の2つのスペースに注意してください。