Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ZREFERENCE

現在のグローバル参照を含みます。

Synopsis

$ZREFERENCE
$ZR

概要

$ZREFERENCE は、最後のグローバル参照の名前と添え字を含みます。これは、ネイキッド・インジケータとして知られています。

Note:

最後のグローバル参照とは、最後にアクセスされたグローバル・ノードです。通常は最後に行われたグローバルへの明示的な参照です。ただし、特定のコマンドは、内部的に $ORDER 関数を使用して、グローバルな添え字を検索したり (この例では ZWRITE コマンド)、内部的に他のグローバル・コマンドを参照する場合があります。このような状況が発生すると、$ZREFERENCE には最後にアクセスされたグローバル・ノードが含まれ、コマンドに指定されたグローバル・ノードではない場合があります。

最後のグローバル参照は、グローバル (^myglob)、またはプロセス・プライベート・グローバル (^||myppg) のいずれかです。$ZREFERENCE は、後続でその変数に対してどのプロセス・プライベート・グローバル接頭語が使用されるかに関わらず、その変数に対して最初に使用されていた形式でプロセス・プライベート・グローバル接頭語を返します。以下の $ZREFERENCE の説明において、“グローバル” という言葉は、両方の種類の変数を指します。

最後のグローバル参照とは、コマンドまたは関数から最近参照されたグローバルのことです。ObjectScript は処理を左から右の順に実行するので、最後のグローバル参照は、常に一番右端のグローバルになります。コマンドまたは関数が複数の引数を取る場合、一番右端の引数で指定されたグローバルが最後のグローバル参照です。引数が複数のグローバル参照を含む場合、一番右端に指定されたグローバルが最後のグローバル参照です。この厳密な左から右の順は、括弧を使用して演算の順序を定義する場合でも、正しく保持されます。

明示的なグローバル参照が発行されるとき、Caché は $ZREFERENCE を更新します。グローバル参照に評価される式 (ローカル変数など) を呼び出しても、$ZREFERENCE は更新されません。

最後のグローバル参照が失敗していたとしても、$ZREFERENCE には、最後のグローバル参照が含まれます。コマンドが未定義のグローバルを参照して <UNDEFINED> エラーが返された場合でも、グローバルが定義されたかのように、Caché はそのグローバル参照に $ZREFERENCE を更新します。この動作は、%SYSTEM.Process.Undefined()Opens in a new tab メソッドの設定には影響されません。

このコマンドの実行に失敗していたとしても、多くの場合、$ZREFERENCE には、最後のグローバル参照が含まれます。各グローバルが参照されると、Caché によって $ZREFERENCE が更新されます。例えば、(数値を 0 で割ろうとすると) <DIVIDE> エラーを返すコマンドは、エラーが発生する前にコマンド内で参照された最後のグローバルに $ZREFERENCE を更新します。しかし、<SYNTAX> エラーは $ZREFERENCE を更新しません。

長いグローバル名

グローバル名が 31 文字より長い (^ などのグローバル接頭語を除く) 場合、$ZREFERENCE は 31 文字に短縮したグローバル名を返します。長いグローバル名の処理の詳細は、"Caché ObjectScript の使用法" の “変数” の章の "グローバル変数" を参照してください。

ネイキッド・グローバル参照

最後のグローバル参照がネイキッド・グローバル参照である場合、$ZREFERENCE には現在のネイキッド・グローバル参照の完全な形式 (外部で読み取り可能) が含まれます。詳細は、以下の例を参照してください。

  SET ^MyData(1)="fruit"
  SET ^MyData(1,1)="apples" ; Full global reference
  SET ^(2)="oranges"        ; Naked global reference,
                            ; implicitly ^MyData(1,2)
  WRITE !,$ZREFERENCE       ; Returns "^MyData(1,2)"

ネイキッド・グローバル参照に関する詳細は、"Caché グローバルの使用法" の "多次元ストレージの使用法 (グローバル)" を参照してください。

Extended Global Reference (拡張グローバル参照)

拡張グローバル参照は、現在のネームスペース以外のネームスペースにあるグローバルの参照に使用されます。拡張グローバル参照を使用して、コマンドがグローバル変数を参照する場合、$ZREFERENCE 値はその拡張グローバル参照を含みます。Caché は、以下の状況において、拡張グローバル参照を返します。

  • 最後のグローバル参照が、拡張グローバル参照を使用して別のネームスペースにあるグローバルを参照する場合。

  • 最後のグローバル参照が、拡張グローバル参照を使用して現在のネームスペースにあるグローバルを参照する場合。

  • 最後のグローバル参照がリモート参照 (リモート・システム上のグローバル) である場合。

いかなる場合でも、$ZREFERENCE は、グローバル参照でどのように指定されたかに関わらず、ネームスペース名をすべて大文字で返します。

グローバル添え字と拡張グローバル参照に関する詳細は、"Caché グローバルの使用法" の "グローバル構造" を参照してください。

$ZREFERENCE を更新する処理

$ZREFERENCE 特殊変数は NULL 文字列 ("") に初期化されます。現在のネームスペースを変更すると、$ZREFERENCE は NULL 文字列にリセットされます。

以下の処理は、最近参照されたグローバルに $ZREFERENCE を設定します。

  • グローバルを引数として使用するコマンドまたは関数。複数のグローバルを使用する場合、$ZREFERENCE は、最も右に位置するグローバルに設定されます(ただし、$ORDER を除く)。

  • グローバルを後置条件式として使用するコマンド。

  • 以下の ZWRITE では、Caché は、指定したグローバル参照の最後にアクセスした添え字ノードに $ZREFERENCE を設定します。

  • 未定義のグローバルを参照して、<UNDEFINED> エラーを生成するか、またはグローバルを定義する ($INCREMENT の場合) コマンドまたは関数。

$ZREFERENCE の設定

SET コマンドを使用すると、この特殊変数を以下のように設定することができます。

  • NULL 文字列 ("") に設定します。これを実行すると、ネイキッド・インジケータを削除してしまいます。次のグローバル参照がネイキッド・グローバル参照の場合、Caché は <NAKED> エラーを返します。

  • 有効なグローバル参照 (定義済みまたは未定義) に設定します。これによって、その後のネイキッド参照では、ユーザによって設定された値が最後の実際のグローバル参照であるかのように使用されます。

SET コマンドを使用して、他の方法で $ZREFERENCE を変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。

以下の例は、最後のグローバル参照を返します。

   SET ^a(1,1)="Hello"  ; Full global reference
   SET ^(2)=" world!"   ; Naked global reference
   WRITE $ZREFERENCE

これは、以下を返します。

^a(1,2)

以下の例は、複数の異なるコマンドからグローバル参照を返します。WRITEZWRITE は、同じグローバル参照でも異なる表示を行うことに注意してください。

   SET (^barney,^betty,^wilma,^fred)="flintstone"
   WRITE !,$ZREFERENCE
   KILL ^flies
   WRITE !,$ZREFERENCE
   WRITE !,^fred
   WRITE !,$ZREFERENCE,!
   ZWRITE ^fred
   WRITE !,$ZREFERENCE

これは、以下を返します。

^fred          ; last of several globals set in left-to-right order
^flies         ; KILL sets global indicator, though no global to kill
flintstone                ; WRITE global
^fred                       ; global from WRITE
^fred="flintstone"   ; ZWRITE global
^fred("")                 ; global from ZWRITE

以下の例は、拡張グローバル参照を返します。ネームスペース名は常に、大文字で返されることに注意してください。

   SET ^["samples"]a(1,1)="Hello"
   SET ^(2)=" world!"
   WRITE $ZREFERENCE
   QUIT

これは、以下を返します。

^["SAMPLES"]a(1,2)

以下の例は、最後のグローバル参照を返します。この場合は ^a(1) です。これは、$LENGTH 関数の引数として使用されます。

   SET ^a(1)="abcdefghijklmnopqrstuvwxyz"
   SET ^b(1)="1234567890"
   SET x=$LENGTH(^a(1))
   WRITE $ZREFERENCE
   QUIT

以下の例では、$ZREFERENCE に設定されている値が最後のグローバル参照であるかのように返されます。この場合、値は ^a(1,1) です。

   SET ^a(1,1)="abcdefghijklmnopqrstuvwxyz"
   SET ^b(1,1)="1234567890"
   WRITE !,^(1)
             ; Naked reference uses last global
   SET $ZREFERENCE="^a(1,1)"
   WRITE !,$ZREFERENCE
   WRITE !,^(1)
             ; Naked reference uses $ZREFERENCE
             ; value, rather than last global.

以下の例は、拡張グローバル参照を設定します。引用符が二重になっていることに注目してください。

   KILL ^x
   WRITE !,$ZREFERENCE
   SET $ZREFERENCE="^[""samples""]a(1,2)"
   WRITE !,$ZREFERENCE

関連項目

FeedbackOpens in a new tab