En elixir tenemos Mapas:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
También tenemos listas de palabras clave:
> 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 qué ambos?
¿Sintaxis? ¿Es porque las listas de palabras clave tienen una sintaxis más flexible que les permite ser definidas sin curlys e incluso sin corchetes como último parámetro de una llamada de función? Entonces, ¿por qué no darle a Maps este azúcar sintáctico?
¿Claves duplicadas? ¿Es porque las listas de palabras clave pueden tener claves duplicadas? ¿Por qué querría tanto acceso al estilo de mapa como claves duplicadas?
¿Actuación? ¿Es porque las listas de palabras clave tienen un mejor rendimiento? Entonces, ¿por qué tener Maps? ¿Y no deberían los mapas ser más eficaces para buscar miembros por clave que una lista de tuplas?
¿JS Array y Ruby Hash como apariencia? ¿Es asi?
Entiendo que estructuralmente son diferentes representaciones de datos. A mí me parece que las listas de palabras clave en elixir sirven para complicar el lenguaje a través de una sintaxis excepcional (3 variantes sintácticas diferentes), superposición de casos de uso con mapas y un beneficio poco claro.
¿Cuál es el beneficio de utilizar listas de palabras clave?