Wie immer habe ich Probleme mit Eval und Expr.
Ich muss ein assoziatives Array erstellen, in dem Werte als Ergebnisse einiger Ausdrücke ausgewertet werden.
Ich muss zum Beispiel etwas erstellen
aaa=[
"2x2" => 4
]
aber 4 es gibt ein Ergebnis des ausgewerteten Ausdrucks Expr(2*2)
Die lahme Variante, die offensichtlich nicht funktioniert, ist hier:
aaa=[
"2x2" => 2*2
]
Aber dann sage ich, dass 2*2 ein Ausdruck ist:
aaa=[
"2x2" => Expr(2*2)
]
und dann verwende ich Eval Expr, um alle Ausdrücke innerhalb des Arguments auszuwerten und den Ausdruck mit ausgewerteten Unterausdrücken zurückzugeben:
Eval Expr(
aaa=[
"2x2" => Expr(2*2)
]
)
und es funktioniert bereits nicht – es wertet Expr(2*2) nicht aus.
Der nächste Schritt wäre die Auswertung des resultierenden Ausdrucks:
Eval(
Eval Expr(
aaa=[
"2x2" => Expr(2*2)
]
)
)
aber offensichtlich funktioniert es nicht.
Warum funktioniert es nicht und was ist der richtige Weg?
OK, verstanden. Ich dachte, es wäre spezifisch für assoziative Arrays, aber es sieht so aus, als wäre es syntaxspezifisch 
@Craige_Hales Gut zu wissen!Klingt, als hätten Sie diesbezüglich etwas Entwicklungserfahrung hinter den Kulissen!
Warum funktioniert es nicht
Die eckige Klammerform ist eine Kompilierungszeitkonstante, sowohl für Arrays als auch für assoziative Arrays. Die Konstante zwischen den eckigen Klammern wird zur Laufzeit geklont und in aaa gespeichert.
@ErraticAttack So würde ich es auch machen.
JMP ist nichts, wenn nicht inkonsistent.Sie können dies über Listen tun, was ich unter folgenden Umständen mache:
val1 = "Steve";
val2 = "The";
val3 = "Turtle";
aaa = Associative Array(
{"key1", "key2", "key3"},
Eval List( {val1, val2, val3} )
);
show( aaa )