Ich musste vor kurzem einige etwas komplexe Datenstrukturen erstellen und begann ein bisschen mehr mit assoziativen Arrays zu spielen. Diese Wörterbücher ähneln den Wörterbüchern in anderen Sprachen. Sie unterscheiden sich in den meisten Sprachen, um die Geschwindigkeit zu verbessern. Wenn Sie ein Objekt in einem Wörterbuch einer Variablen zuweisen, erfolgt eine Datenbindung. Im Wesentlichen ist es so, dass sowohl das Wörterbuch als auch die Variable sich auf den gleichen Speicherblock beziehen und alle Änderungen an einem der beiden den anderen beeinflussen. JMP macht dies jedoch nicht. Nachfolgend finden Sie einige Beispielcodes, um zu erklären, worüber ich spreche.
testAA = Associative Array(
{
{"test1", Associative Array(
{{"data", {"data1", "data2"}}}
)},
{"test2", Associative Array(
{{"data", {"data1", "data2"}}}
)}
}
);
//create new object
AA = testAA["test1"];
//adding data to AA doesn't add data to testAA
AA["newData"] = "newData";
//you can see AA is a new object
print(AA, testAA);
//Work around to ensure data structures are in sync
testAA["test1"] = AA;
print(AA, testAA);
Ich glaube nicht, dass JSL als Sprache dieses Verhalten als Standard verwenden möchte. Ich sage, b / c kann dies für viele neue Programmierer verwirrend sein, und JSL hat vor allem viele Nicht-Programmierer-Enthusiasten. Diese Logik wird jedoch auf Datentabellen angewendet. AKA:
test = New Table("Hello");
test2 = test;
test << New Column("NewColumn");
print(test2 << Get Column Names);
Ich denke, es wäre wirklich schön, wenn es einen anderen Zuweisungsoperator gibt, der bei Bedarf auf Datenobjekte verweist. Auf diese Weise könnte ich wählen, ob ich ein neues Objekt oder einen Verweis auf das andere Objekt haben möchte. Ich würde mich für andere Gedanken zu diesem Thema interessieren. Ich könnte auch völlig falsch sein und es könnte eine Möglichkeit geben, die assoziativen Arrays zu hacken, um dies zu tun, was ich noch nicht gefunden habe.
Vielen Dank!