以下の文の意味を教えてください。
S:%B= %B="@1" S:%E= %E="@999"
次の行から:
S:%B= %B="@1" S:%E= %E="@999"
は実際にはMUMPSコードではありません。このフォーラムにコードを貼り付ける際に問題が発生した可能性があるという他の回答者に同意します。
あなたが投稿しようとしていた可能性が最も高い MUMPS コードは次のとおりです。
S:%B="" %B="@1" S:%E="" %E="@999"
完全な説明とともに、これは同じ行にある 2 つの MUMPS コマンドです。
S:%B="" %B="@1"
S:%E="" %E="@999"
非簡潔な MUMPS を使用すると、次のようになります。
SET:%B="" %B="@1"
SET:%E="" %E="@999"
または英語では、これらのコマンドは変数をチェックし、このプログラムにとって意味のある値がない場合は、その変数にデフォルト値を割り当てます (SET)。
%B という名前の変数の場合、ガード条件 (%B="") が満たされると、デフォルトの文字列値 "@1" が割り当てられます。同様に、%E という名前の変数には、変数 %E が空の文字列と等しい場合、デフォルトの文字列値 "@999" が割り当てられます。
MUMPS の "@" 文字は、変数への値の遅延バインディング (言語ではインダイレクションと呼ばれる) に使用されますが、その後に変数の名前が続く必要があります。「1」や「999」などの純粋な数値は変数の名前ではないため、これらのデフォルト値が別の値を間接的に参照することを意図している可能性はほとんどありません。
セットが次のように解決されると仮定するとS:%B=""
(DTM とキャッシュは、値を比較するときにデフォルトで暗黙の null を許可していないようです。間違っている場合は誰かコメントしてください)、
set:%B="" %B="@1" set:%E="" %E="@999"
、 に相当
if %B="" set %B="@1"
if %E="" set %E="@999"
%B 変数と %E 変数のそれぞれについて、空の文字列の場合は、リテラル文字列値 "@1" と "@999" をそれぞれ割り当てます。SET、WRITE、DO などのコマンドの後のコロン (:) は、コロンの直後にあるステートメントで条件付きであることを示します。
構文に関しては、プログラマーが作るのと同じくらい醜いだけです。
それは条件と呼ばれますSET
。%B または %E 変数が null の場合、これらの変数を対応する変数に設定します。