Dans elixir, nous avons des cartes:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Nous avons également des listes de mots clés:
> 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)
Pourquoi les deux?
Syntaxe? Est-ce parce que les listes de mots-clés ont une syntaxe plus flexible permettant de les définir sans boucles et même sans crochets comme dernier paramètre d'un appel de fonction? Alors pourquoi ne pas donner à Maps ce sucre syntaxique?
Dupliquer les clés? Est-ce parce que les listes de mots clés peuvent avoir des clés en double? Pourquoi voudriez-vous à la fois un accès de style carte et des clés en double?
Performance? Est-ce parce que les listes de mots clés ont de meilleures performances? Alors pourquoi avoir des cartes? Et les cartes ne devraient-elles pas être plus performantes pour rechercher les membres par clé qu'une liste de tuples?
JS Array et Ruby Hash aiment l'apparence? Est-ce que c'est ça?
Je comprends que structurellement ce sont des représentations de données différentes. Il me semble que les listes de mots-clés dans elixir servent à compliquer le langage grâce à une syntaxe exceptionnelle (3 variantes syntaxiques différentes), un chevauchement des cas d'utilisation avec des cartes et un avantage peu clair.
Quel est l'avantage d'utiliser les listes de mots clés?