No elixir, temos Mapas:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Também temos listas de palavras-chave:
> 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)
Por que ambos?
Sintaxe? É porque as Listas de Palavras-chave têm uma sintaxe mais flexível, permitindo que sejam definidas sem curvas e até mesmo sem colchetes como o último parâmetro de uma chamada de função? Então por que não dar ao Maps esse açúcar sintático?
Chaves duplicadas? É porque as listas de palavras-chave podem ter chaves duplicadas? Por que você deseja acesso ao estilo de mapa e chaves duplicadas?
Atuação? É porque as listas de palavras-chave têm melhor desempenho? Então por que o Maps? E os mapas não deveriam ter mais desempenho ao procurar membros por chave do que uma lista de tuplas?
JS Array e Ruby Hash gostam de aparência? É isso?
Eu entendo que estruturalmente eles são representações de dados diferentes. Para mim, parece que as listas de palavras-chave no elixir servem para complicar a linguagem por meio de sintaxe excepcional (3 variantes sintáticas diferentes), sobreposição de casos de uso com mapas e um benefício pouco claro.
Qual é a vantagem de usar listas de palavras-chave?