In elisir abbiamo Maps:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Abbiamo anche elenchi di parole chiave:
> kl = [a: "one", b: "two"] # = [a: "one", b: "two"]
> kl2 = [{:a, "one"},{:b, "two"}] # = [a: "one", b: "two"]
> kl == kl2 # = true
> kl[:a] # = "one"
> kl.a # = ** (ArgumentError)
Perché entrambi?
Sintassi? È perché gli elenchi di parole chiave hanno una sintassi più flessibile che consente loro di essere definiti senza riccioli e anche senza parentesi come l'ultimo parametro di una chiamata di funzione? Allora perché non dare a Maps questo zucchero sintattico?
Chiavi duplicate? È perché gli elenchi di parole chiave possono avere chiavi duplicate? Perché vorresti sia l'accesso in stile mappa che le chiavi duplicate?
Prestazione? È perché gli elenchi di parole chiave hanno prestazioni migliori? Allora perché hanno Maps? E le mappe non dovrebbero essere più performanti nel cercare i membri per chiave rispetto a un elenco di tuple?
JS Array e Ruby Hash come l'aspetto? È così?
Capisco che strutturalmente sono rappresentazioni di dati differenti. A me sembra che gli elenchi di parole chiave in elisir servano a complicare il linguaggio attraverso una sintassi eccezionale (3 diverse varianti sintattiche), la sovrapposizione dei casi d'uso con le mappe e un vantaggio poco chiaro.
Qual è il vantaggio dell'utilizzo degli elenchi di parole chiave?