Dictionnaires
ton.dict utilisateur = {nom: "kuro", age: 22}
print(utilisateur["nom"]) // kuro
utilisateur["age"] = 23
utilisateur["ville"] = "paris" // ajoute une nouvelle clé
print(keys(utilisateur)) // [nom, age, ville]
print(has(utilisateur, "age")) // true
Les clés de dict sont toujours des chaînes (voir Limitations connues) : une clé identifiant nue (nom: ...) est traitée comme son propre nom, et une clé non-identifiant nécessite un littéral chaîne ("prénom nom": ...). Lire une clé absente renvoie nil plutôt que de lever une erreur ; écrire sur une nouvelle clé l'ajoute. keys()/values() itèrent dans l'ordre d'insertion.
Spread (...) fusionne les entrées d'un autre dict directement dans un littéral — une entrée plus tardive (étalée ou non) écrase une entrée précédente avec la même clé, en gardant la position d'origine de cette clé plutôt que de la déplacer à la fin :
ton.dict base = {a: 1, b: 2}
ton.dict fusion = {...base, b: 99, c: 3} // {a: 1, b: 99, c: 3}
L'expression étalée doit elle-même être un dict — étaler autre chose est une erreur d'exécution.
Accès par point (depuis beta-2.0.0) — d.cle lit une clé (ou nil) et d.cle = valeur l'écrit, exactement comme d["cle"]. Garde les crochets pour les clés qui ne sont pas des noms valides ou qui sont calculées.
ton.dict cfg = {port: 8080}
cfg.host = "localhost"
cfg.port += 1
print(cfg.port, cfg.host) // 8081 localhost
print(cfg.missing?.value) // nil (chaînage optionnel)
Déstructuration — récupère des clés dans des variables, éventuellement renommées avec cle: nom, et le reste avec ...reste :
ton.let {name, age: annees, ...reste} = {name: "rusher", age: 30, city: "paris"}
print(name, annees, reste) // rusher 30 {city: paris}
for cle, valeur in d { ... } parcourt les paires ; items(d), dict(paires), merge(a, b) et remove(d, cle) complètent la boîte à outils (voir Fonctions natives).