2

私は最近のプロジェクトで MUMPS に取り組んでいます。ネイキッドインジケーターについて質問です。ルーチンと裸のグローバル参照の間で混乱しています。

ルーチンとネイキッドインジケーターの違いを理解するのを手伝ってくれる人はいますか? ルーチンの構文は、ネイキッド インジケーターの構文と非常によく似ています。

4

1 に答える 1

7

あなたの質問を完全に理解しているかどうかはわかりませんが、ルーチン参照とグローバル参照の両方がキャレット (^) で始まるという事実に言及していると思われます。

ルーチンはキャレットを使用して、ルーチンと現在のルーチン内のラベルを区別します。例えば:

D COMPUTATION         ; executes the COMPUTATION label in the current routine
D ^COMPUTATION        ; executes the COMPUTATION routine
D SUBCOMP^COMPUTATION ; executes the SUBCOMP label in the COMPUTATION routine.

変数の場合、キャレットはそれがローカル変数ではなくグローバル変数であることを示します。これは、裸の参照を使用するかどうかに関係なく当てはまります (私が理解しているように、裸の参照は違いがないので、これはあなたの質問をより明確にすることが必要な場合があります)。もちろん違いは、ネイキッド参照では、変数名と、グローバルの最後の添字を除くすべてを削除できることです。例えば:

S ^MYGLOB(1,1)="one"
S ^MYGLOB(1,2)="two"

と同等です

S ^MYGLOB(1,1)="one"
S ^(2)="two" ;naked, ewww

そうは言っても、裸の参照を使用しないことを強くお勧めします。これらは、コマンド プロンプトからコードを入力するときに時間を節約することを目的としていますが、保守が必要なコードでは非常に危険です。たとえば、上記の 2 行のコードの間に ^OTHERGLOB への参照が挿入された場合、^(2) は ^MYGLOB(1,2) ではなく ^OTHERGLOB(2) を参照します。言うまでもなく、読むのは苦痛です。

于 2010-10-13T17:50:58.873 に答える