Hace poco tuve la necesidad de crear algunas estructuras de datos un poco complejas y comencé a jugar con matrices asociativas un poco más. Estos son similares a los diccionarios en otros idiomas. Donde difieren es que la mayoría de los idiomas para mejorar la velocidad, al asignar un objeto en un diccionario a una variable, hace un enlace de datos. Esencialmente lo hace para que tanto el diccionario como la variable se refieran al mismo bloque de memoria y cualquier edición de uno afecte al otro. Sin embargo, JMP no hace esto. A continuación hay un código de ejemplo para ayudar a explicar de qué estoy hablando.
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);
No creo que JSL como idioma quiera este comportamiento como predeterminado. Yo digo que, b / c esto puede ser confuso para muchos programadores nuevos y JSL especialmente tiene enthuists no programadores. Sin embargo, esta lógica se aplica a las tablas de datos. AKA:
test = New Table("Hello");
test2 = test;
test << New Column("NewColumn");
print(test2 << Get Column Names);
Creo que sería muy bueno si hubiera otro operador de asignación que hiciera referencias a los objetos de datos si fuera necesario. De esta manera podría elegir si quiero un nuevo objeto o una referencia al otro. Estaría interesado en otros pensamientos sobre el tema. Además, podría estar completamente equivocado y podría haber una manera de hackear los arreglos asociativos para hacer esto que no he encontrado todavía.
¡Gracias!