ZTRAP (ObjectScript)
構文
ZTRAP:pc ztraparg
ZTRAP:pc $ZERROR
ZTRAP:pc $ZE
引数
引数 | 説明 |
---|---|
pc | オプション — 後置条件式。 |
ztraparg | オプション — エラー・コードの文字列。エラー・コードの文字列は、文字列リテラル、または文字列に評価される式として指定しますが、文字列の最初の 4 文字のみが使用されます。 |
$ZERROR | 特殊変数 $ZERROR。$ZE と省略できます。 |
概要
ZTRAP コマンドは、コマンド後置条件と引数間接指定の両方を受け入れます。ZTRAP には、以下の 3 つの形式があります。
-
引数なし
-
文字列引数付き
引数なしの ZTRAP はエラーを強制し、エラー・コード <ZTRAP> を表示します。
ZTRAP ztraparg はエラーを強制し、エラー・コード <Zxxxx> を表示します。xxxx は、ztraparg によって指定された文字列の最初の 4 文字です。引用符付きの文字列リテラルではなく式を指定した場合、コンパイラは式を評価して、結果の文字列の最初の 4 文字を使用します。式を評価するとき、InterSystems IRIS は、プラス符号と、先頭および末尾のゼロを数字から切り離します。ztraparg の残りすべての文字は無視されます。
ZTRAP $ZERROR は新しいエラーを強制しません。ZTRAP$ZERROR は現行のプログラム・スタック・レベルで実行を停止し、別のエラー・ハンドラが見つかるまでスタック・レベルをポップします。その後、現行のエラー・コードを使用して、そのエラー・ハンドラで実行を続行します。
引数
pc
オプションの後置条件式。InterSystems IRIS は、後置条件式が True (0 以外の数値に評価される) の場合にコマンドを実行します。InterSystems IRIS は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"コマンド後置条件式" を参照してください。
ztraparg
文字列リテラルまたは文字列に評価される式。ztraparg には、以下のいずれかの値を指定できます。
-
任意の文字を含む任意の長さの引用符付き文字列。ZTRAP は最初の 4 文字のみを使用して、エラー・コードを生成します。文字列が 4 文字未満の場合は、指定されたすべての文字列が使用されます。常に大文字となるシステム・エラー・コードとは異なり、大文字/小文字は維持されます。以下にコード例を示します。
ZTRAP "FRED" ; generates <ZFRED> ZTRAP "Fred" ; generates <ZFred> ZTRAP "Freddy" ; generates <ZFred> ZTRAP "foo" ; generates <Zfoo> ZTRAP " foo" ; generates <Z foo> ZTRAP "@#$%" ; generates <Z@#$%> ZTRAP "" ; generates <Z> ZTRAP """" ; generates <Z">
-
文字列として評価される式。
ZTRAP 1234 ; generates <Z1234> ZTRAP 2+2 ; generates <Z4> ZTRAP 10/3 ; generates <Z3.33> ZTRAP +0.700 ; generates <Z.7> ZTRAP $ZPI ; generates <Z3.14> ZTRAP $CHAR(64)_$CHAR(37) ; generates <Z@%> ZTRAP "" ; generates <Z> ZTRAP """" ; generates <Z">
ZTRAP コマンドは、引数間接指定を受け入れます。詳細は、"間接 (@)" のリファレンス・ページを参照してください。
$ZERROR によるエラー・ハンドラへの制御渡し
ZTRAP の引数が特殊変数 $ZERROR のときは、$ZTRAP エラー・ハンドラ内で有効な特別な処理が実行されます。ZTRAP $ZERROR は新しいエラーを強制しません。ZTRAP $ZERROR は現行のプログラム・スタック・レベルで実行を停止し、別のエラー・ハンドラが見つかるまでスタック・レベルをポップします。その後、現行のエラー・コードを使用して、そのエラー・ハンドラで実行を続行します。このエラー・ハンドラは別のネームスペースにある場合があります。
例
以下の例は、式で ZTRAP コマンドを使用して、エラー・コードを生成する方法を示したものです。
; at this point the routine discovers an error ...
ZTRAP "ER23"
...
ルーチンが実行され、予想されたエラー条件が発見されたら、出力は以下のようになります。
<ZER23>label+offset^routine
以下の例は、後置条件を使用すると ZTRAP コマンドにどのような影響を与えるかを示しています。
;
ZTRAP:y<0 "yNEG"
;
ルーチンが実行され、y が負数である場合、出力は以下のようになります。
<ZyNEG>label+offset^routine
以下の例は、ZTRAP コマンドの引数間接指定をどのように使用するかを示したものです。
;
SET ERPTR="ERMSG"
SET ERMSG="WXYZ"
;
;
ZTRAP @ERPTR
出力は、以下のようになります。
<ZWXYZ>label+offset^routine
以下の例は、前のコンテキスト・レベルで定義された $ZTRAP エラー・トラップ・ハンドラを起動する ZTRAP コマンドを示します。
Main
NEW $ESTACK
SET $ZTRAP="OnErr"
WRITE !,"$ZTRAP set to: ",$ZTRAP
WRITE !,"Main $ESTACK= ",$ESTACK // 0
WRITE !,"Main $ECODE= ",$ECODE," $ZERROR=",$ZERROR
DO SubA
WRITE !,"Returned from SubA" // not executed
WRITE !,"MainReturn $ECODE= ",$ECODE," $ZERROR=",$ZERROR
QUIT
SubA
WRITE !,"SubA $ESTACK= ",$ESTACK // 1
ZTRAP
WRITE !,"SubA $ECODE= ",$ECODE," $ZERROR=",$ZERROR
QUIT
OnErr
WRITE !,"OnErr $ESTACK= ",$ESTACK // 0
WRITE !,"OnErr $ECODE= ",$ECODE," $ZERROR=",$ZERROR
QUIT