$ZAHandle()

$ZAHANDLE() は名前またはエイリアスのコンテナに関連付けられている配列のユニークな識別子(ハンドル)を返します; 添字 lvn のために、それは空の文字列を返します。デバッグを容易にするために、ハンドルは16進数の表示可能な文字列で表現します。$ZAHANDLE()の呼び出しによって返された値での唯一の有意義な操作は、別の呼び出しによって返された値と等しいかどうか、それを比較することです。配列内のノードを変更すると、そのハンドルは変更されません。$ZAHANDLE() は、配列のコピーに対して異なる結果を返します。

例:

GTM>set A=1,*B(1)=A
GTM>write "$zahandle(A)=""",$zahandle(A),""" $zahandle(B(1))=""",$zahandle(B(1)),""""
$zahandle(A)="17B8810" $zahandle(B(1))="17B8810"
GTM>set A("Subscript")="Value" ; Change array - but $ZAHandle() doesn't change
GTM>write "$zahandle(A)=""",$zahandle(A),""" $zahandle(B(1))=""",$zahandle(B(1)),""""
$zahandle(A)="17B8810" $zahandle(B(1))="17B8810"
GTM>merge D=A ; A copy of the data has a different $zahandle()
GTM>Write "$ZAHandle(A)=""",$ZAHandle(A),""" $ZAHandle(D)=""",$ZAHandle(D),""""      
$zahandle(A)="17B8810" $zahandle(D)="17B8C10"
GTM>

GT.Mはその結果としての配列またはエイリアス変数を返す関数のための方法は提供しないので、接尾辞として合意された接頭辞(例えば "%")とその$ZAHANDLE()でローカル変数に結果を配置することにより、$ZAHandle() の一意性はこの能力を効果的に活用することができます。ハンドルは、値として返すことができます。

$ /usr/lib/fis-gtm/V5.4-002B_x86/gtm -run retval
retval        ; Return an array / object from a function
    ;;Data for the object array
    ;;Albert Einstein,14-March-1879
    ;;Arthur Eddington,28-December-1882
    ;;
    zprint    ; Print this program
    new tmp1,tmp2,tmp3
    for i=3:1 set tmp1=$text(+i),tmp2=$piece(tmp1,";;",2) quit:'$length(tmp2)  do
    .set tmp3="%"_$$NewPerson($piece(tmp2,",",1),$piece(tmp2,",",2))
    .set @("*Relativists("_(i-2)_")="_tmp3)
    .kill @("*"_tmp3)
    kill tmp1,tmp2,tmp3
    write "------------",!
    write "Array of objects of relativists:",!
    zwrite
    quit
    ;    
NewPerson(name,birthdate)    ; Create new person object
    new lname,fname,dob,tmp1,tmp2 ; New variables used by this function
    set lname=$Piece(name," ",2),fname=$Piece(name," ",1)
    set dob=$$FUNC^%DATE(birthdate)
    set tmp1("fname")=fname,tmp1("lname")=lname,tmp1("dob")=dob
    set tmp2=$ZAHandle(tmp1)
    set @("*%"_tmp2_"=tmp1")
    quit tmp2
------------
Array of objects of relativists:
$ZWRTAC=""
*Relativists(1)=$ZWRTAC1
$ZWRTAC1("dob")=13952
$ZWRTAC1("fname")="Albert"
$ZWRTAC1("lname")="Einstein"
*Relativists(2)=$ZWRTAC2
$ZWRTAC2("dob")=15337
$ZWRTAC2("fname")="Arthur"
$ZWRTAC2("lname")="Eddington"
i=5
$ZWRTAC=""
$
inserted by FC2 system