SETは、変数または変数の選択された部分に値を割り当てます。
SETコマンドのフォーマットは:
S[ET][:tvexpr] setleft=expr | (setleft[,...])=expr | *lvn=lname | aliascontainer[,...]
where
setleft == glvn | $EXTRACT(glvn,[,intexpr1[,intexpr2]]) | $PIECE(glvn,expr1[,intexpr1[,intexpr2]]) | isv
そして:
aliascontainer == lvn | exfunc | exvar
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
等号(=)の左側の添字ありまたは添字なしローカルまたはグローバル変数名は、等号の右側に見つける式に格納する変数を指定します; 変数はSETする前に存在する必要はありません; もしSETする前に変数が存在する場合、SETはその古い値を書き換えます。
SETしている間に、GT.Mは、左の前の等号の右辺を評価し; これはGT.Mの中で左から右への評価の順番の例外であり、そして、GT.Mは、変数を設定する前に等号(=)の右側にある式を使用してネイキッドインジケータを維持していることを意味します。
等号の左側の引数の部分が$PIECE関数のフォームになっている場合、SETは、指定された一部または部分を等号の右側にある式の値を持つ変数($PIECE() のフォームに最初の引数として指定された)に置き換えます; 変数がSETする前に存在しなかった場合、または、$PIECE() のフォームへオプションの3番目と4番目の引数によって識別される部分が現在含まれていない場合、SETは、$PIECE() のフォームをフィットし割り当てるために、$PIECEのフォームの2番目の引数によって指定された先頭の区切り文字を、十分に追加します。4番目の引数が3番目の引数を超えた場合、SETは、ターゲット glvn を変更したり、ネイキッドインジケータを変更しないことに注意してください。
等号の左側の引数の部分が$EXTRACT関数のフォームになっている場合、SETは、指定された1文字または複数の文字を等号の右側にある式の値を持つ変数($EXTRACT() のフォームに最初の引数として指定された)に置き換えます; 変数がSETする前に存在しなかった場合、または、$EXTRACT() のフォームへオプションの2番目と3番目の引数によって識別される文字が現在含まれていない場合、SETは、$EXTRACT() のフォームをフィットし割り当てるために、先頭のスペースを、十分に追加します。3番目の引数が2番目の引数を超えた場合、SETは、ターゲット glvn を変更したり、ネイキッドインジケータを変更しないことに注意してください。
等号の左側のisv
には、固有の特殊変数を含めることができます。すべてのISVがアプリケーションによってSETの更新を許可するわけではありません。個々のISVの説明を参照してください。
等号の左側にある引数の部分が括弧で囲まれた setlefts
のリスト形式である場合、SETは等号の右側にある式の値をすべてのディストネーションに割り当てます。
SETがトリガ定義に一致するグローバル・ノードを更新すると、GT.Mはノードがプロセスのアドレス空間で更新された後、データベースに適用される前にトリガコードを実行します。トリガの実行が完了すると、トリガ・ロジックは、$ZTVALUEが設定されていない場合にのみ、ノードの値をプロセス・アドレス空間からコミットします。トリガーの実行中に$ZTVALUEが設定されている場合、トリガー・ロジックはノードの値を$ZTVALUEの値からコミットします。トリガーでSETを使用する方法の詳細については、「トリガー」の章の “Set” セクションを参照してください。
SET * コマンドは、等号の左側の lvn を添字のない lvn(配列のルート)または 添字付きの lvn の場合はエイリアス・コンテナにする場合、エイリアスを明示的にエイリアスにします。等号の右側にある引数の部分が lname(配列のルート)以外の場合は、エイリアスまたはエイリアス・コンテナに評価する必要があります。外部関数および外部特殊変数は、QUIT * で終了するとエイリアスコンテナを返します。エイリアス変数に詳細は、 " エイリアス変数の拡張 " を参照してください。
SET *コマンドでは、等号の左側にある lvn に関連付けられた以前の配列はそれに関連付けられなくなり、lvnがそのスコープ内のその(古い)配列に関連する唯一のlvnだった場合、GT .Mはそれが占有したスペースを再利用するかもしれません。エイリアス割り当てでは、等号の右側に名前のデータセットが存在する必要はなく、割り当てによって単純に関連が作成されます。
SET * 左側の引数は、SET (a,*b)=c や SET (*a,*b)=c などカッコで囲まれたリストにはできません。
SET と SET * の割り当ては、例えば、SET *a=b,^c(3)=d(4) などのコンマ区切りリストで1つのコマンドに結合できます。
SET は引数の間接指定を受け入れます。つまり、SETは、x="*a=b",@x を受け入れますが、SET は、x="*a",@x=b or SET x="b",*a=@x を許可しません。
間接指定演算子と1つ以上のSETの引数リストに評価される原子式(expression atom)は、SETのための正当な引数を構成します。
GT.Mが式を等号(=)の右に評価できるのであれば、正しいシンタックスを持つ SETは、変数の以前の状態や値にかかわらず常に成功します。
$PIECE() または $EXTRACT() のシンタックスについては、第7章: "関数" を参照してください。
例:
GTM>Kill Set a="x",(b,c)=1,@a="hello" ZWRite a=x b=1 c=1 x="hello" GTM>
KILLコマンドは、以前に定義されたローカル変数を削除します。SETコマンドは、3つの引数があります。最初は単純な直接割り当てを示しています。2つ目は複数の変数に同じ値を代入するフォームを示しています。3つ目は、等号の左側にあるアトミックな間接指定を示しています。 ZWRITEコマンドは、割り当ての結果が表示されます。
例:
GTM>Set ^(3,4)=^X(1,2)
GT.MはSET引数内の左側の前に等号の右辺を評価するため、右側の式は、左辺を評価より優先して、ネイキッド・リファレンス・インディケータを決定します。したがって、この例では、^X(1,2)の値を^X(1,3,4) に割り当てます。
例:
GTM>Kill x Set $Piece(x,"^",2)="piece 3" ZWRite x x="^^piece 3" GTM>
このSETは、"セットピース: set piece"を示し、必要なときに、SETが欠落している区切り文字を生成する方法を示しています。$PIECE() の詳細については、 第7章: "関数" を参照してください。
例:
GTM>Set x="I love hotdogs" GTM>Set x="I love hotdogs" GTM>Set $Extract(x,3,6)="want" GTM>Write x I want hotdogs GTM>Set $Extract(x,7)=" many " GTM>Write x I want many hotdogs GTM>
SET $EXTRACTコマンドは、等号(=)の右側に式の値で指定された文字を置換して抽出します。$EXTRACT() の詳細については、 第7章: “関数”を参照してください。
例:
GTM>kill A,B GTM>set A=1,A(1)=1,A(2)=2 GTM>set *B=A ; A & B are aliases. GTM>zwrite B B=1 ;* B(1)=1 B(2)=2 GTM>
このSET *コマンドは、AとBの間に関連付けられたエイリアスを作成します。A のノードのツリー全体をそのルートとすべての子孫をBに関連付けます。
例:
GTM>kill A,B,C GTM>set A=1,*C(2)=A ; C(2) is a container GTM>zwrite A=1 ;* *C(2)=A GTM>set *B=C(2) ; B is now an alias GTM>write B,":",$length(C(2)),":" ; An alias variable provides access but a container doesn't 1:0: GTM>
この SET * コマンドは、エイリアス・コンテナを逆参照することによってエイリアスを作成します。