変数 + 変数名の形式で多くの変数を表示する関数を作成しています。
Define LibPub out(list)=
Func
Local X
for x,1,dim(list)
list[x]->name // How can I get the variable name here?
Disp name+list[x]
EndFor
Return 1
EndFunc
リスト値が与えられた場合、その名前を見つける方法はありません。
次の例を検討してください。
a:={1,2,3,4}
b:=a ; this stores {1,2,3,4} in b
out(b)
行 1:最初に値{1,2,3,4}
が作成されます。次に、 name の変数a
が作成され、その値が に設定され{1,2,3,4}
ます。
行 2:式a
が評価されます。結果は{1,2,3,4}
です。名前を持つ新しい変数b
が作成され、その値が `{1,2,3,4} に設定されます。
行 3:式b
が評価されます。変数参照は、 に格納されている値を検索しますb
。結果は{1,2,3,4}
です。次に、この値が関数に渡されますout
。
関数out
は値を受け取ります{1,2,3,4}
。値が与えられた場合、値がたまたま変数に格納されたかどうかを知る方法はありません。ここで、値は と の両方a
に格納されb
ます。
ただし、 も見ることができますout({1,1,1,1}+{0,2,3,4})
。
システムは評価{1,1,1,1}+{0,2,3,4}
して取得し{1,2,3,4}
ます。その後out
、呼び出されます。値out
は式の結果を受け取りましたが、同等の値がたまたま and に格納されa
てb
います。これは、値に名前がないことを意味します。
一般に、変数には名前と値があります。値には名前がありません。
名前を印刷する必要がある場合は、文字列を調べてください。
これはメモリを集中的に使用しますが、変数名の文字列を保持し、各名前をいくつかの文字で区切り、取得するリスト内の変数のインデックスに基づいて部分文字列を取得できます。たとえば、インデックス 0 にアクセスする場合、(変数のインデックス * 変数名の長さ、変数のインデックス * 長さ + 長さ + 1) で始まる部分文字列を取得します。文字列は次のようになります: 変数 foo、bas、random、impetus があるとします。文字列は次のように格納されます: "foo bas random impetus "