ZGoto

ZGOTOのコマンドは、GT.Mの呼び出しスタック内のさまざまなレベルへ、制御を移します。また、ルーチンのある部分から別へ、または、1つのルーチンから別の指定されたentryref を使って別へ、制御を移すします。

ZGOTOコマンドのフォーマットは:

ZG[OTO][:tvexpr] [[intexpr][:entryref[:tvexpr]],...]

entryref を持つ ZGOTO コマンドは、GT.Mスタックレベルを減少させるの追加の能力で、GOTOコマンドに似た機能を実行します。単一の操作では、ZGOTO は、暗黙のQUITを実行し、そして、名づけられた entryref に制御を移すGOTO操作を実行 します($ZLEVEL - intexpr) 。入口参照(entryref)の詳細については、 第5章: “Mの一般的な言語特徴 を参照してください。

ZGOTOコマンドは、整数式で指定されたレベルでの呼び出しスタックを残します。GT.Mは、すべてに介入しているFORループを暗黙的に終了し、そして、必要に応じて、NEWコマンドでスタックされた変数をアンスタックします。

ZGOTO 0 を使うと、現在のGT.Mの呼び出しから抜け出る結果を生じさせます。

ZGOTO 0:entryref を使用すると、 "unlink all" 機能が呼び出されます。プロセスは、リンクされているすべてのルーチンとそれ自身との関連付けを解除し、メモリを解放し、M仮想スタック内の唯一の現在のエントリとしてentryrefで実行を続行することができます。ZGOTO 0:entryref は、この遷移の間にローカル変数とIOデバイスを保持し、以下を実行します:

ZGOTOは、現在の呼び出しの中でアクティブなレベル数には関係なく抜け出すことを引き起こす点で、HALT(QUITでない)に似ています。 ZGOTOは、GT.Mコンテキストを破棄する点で(HALTでない)QUITに似ています、そして、もし現在のGT.Mの呼び出しがプロセスのベースにある場合にのみプロセスを終了します。ZGOTOとHALTの違いを理解することは、GT.Mが他の言語から再帰的に呼び出される環境だけに影響を与えます。

ZGOTO $ZLEVEL:LABEL^ROUTINE は、GOTO LABEL^ROUTINE と同一の結果を生成します。ZGOTO $ZLEVEL-1 は、QUITと同じ応答を返します(もしダイレクトモードでならば、ZCONTINUE続いて)。もし整数式が、$ZLEVELの現在の値より大きい、または、0(0)未満の値で評価された場合、GT.Mはランタイムエラーを発行します。

もしZGOTOが entryref を持ってない場合、暗黙的QUITのいくつかの番号を実行し、そして、指定されたレベルで次のコマンドへ制御を移行します。もしZGOTOが引数を持たない場合、ZSHOW "S" で表示される最も低いレベルのGT.Mルーチンの動作を再開する ZGOTO 1 のように動作します。$gtm_dist mumps -directにより呼び出されるイメージの中では、引数なしZGOTOは、ダイレクトモードへのプロセスを返します。

ZGOTOは、ダイレクトモードでの便利なデバッグツールが用意されています。しかしながら、 ZGOTOは構造化コーディングを助長しないため、エラー処理のためにプロダクション(本番)プログラムの中で使用を制限することが最善です。 GT.Mのエラー処理の詳細については、 第13章: “エラー処理を参照してください。

ZGOTOの例

例:

GTM>ZGOTO
GTM>ZSHow
+1^GTM$DMOD (Direct mode)
GTM>

これは、GT.Mの呼び出しスタックの全レベルをクリアするZGOTOを使用しています。引数なしのZSHOWは、スタックを表示します。

例:

SET $ZTRAP="ZGOTO "_$ZLEVEL_":^ERROR"

もしエラーが$ZTRAPをXECUTEするためにGT.Mを引き起こす場合に、ルーチンERRORは、例に示すように、SETコマンドと同じレベルで実行されるので、これは、ZGOTOを含むように$ZTRAPをSETします。

inserted by FC2 system