J'ai récemment eu besoin de créer des structures de données légèrement complexes et j'ai commencé à jouer un peu plus avec les tableaux associatifs. Ceux-ci sont similaires aux dictionnaires dans d'autres langues. Là où ils diffèrent, c’est que la plupart des langues améliorent la vitesse. Lorsqu’un objet d’un dictionnaire est attribué à une variable, il effectue une liaison de données. Essentiellement, le dictionnaire et la variable font référence au même bloc de mémoire et toute modification apportée à l'un affecte l'autre. Cependant, JMP ne le fait pas. Vous trouverez ci-dessous un exemple de code permettant d’expliquer de quoi je parle.
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);
Je ne pense pas que JSL en tant que langage voudrait ce comportement par défaut. Je dis cela, car cela peut être déroutant pour beaucoup de nouveaux programmeurs et JSL est particulièrement enthousiasmé par de nombreux non-programmeurs. Cependant, cette logique est appliquée aux tables de données. ALIAS:
test = New Table("Hello");
test2 = test;
test << New Column("NewColumn");
print(test2 << Get Column Names);
Je pense que ce serait vraiment bien s'il y avait un autre opérateur d'affectation qui ferait des références aux objets de données si nécessaire. De cette façon, je pourrais choisir si je veux un nouvel objet ou une référence à l'autre. Je serais intéressé par d'autres réflexions sur le sujet. De plus, je pourrais avoir complètement tort et il pourrait y avoir un moyen de pirater les tableaux associatifs pour faire cela que je n'ai pas encore trouvé.
Merci!