В эликсире мы имеем Карты:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
У нас также есть списки ключевых слов:
> 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)
Почему?
Синтаксис? Это потому, что списки ключевых слов имеют более гибкий синтаксис, позволяющий им определять без курсивов и даже без скобок в качестве последнего параметра вызова функции? Тогда почему бы не дать Картам этот синтаксический сахар?
Повторяющиеся ключи? Это потому, что в списках ключевых слов могут быть дубликаты ключей? Зачем вам нужен способ доступа к карте и дубликаты ключей?
Производительность? Это потому, что списки ключевых слов имеют лучшую производительность? Тогда почему Карты? И не должны ли карты быть более эффективными при поиске членов по ключу, чем список кортежей?
JS Array и Ruby Hash, как внешний вид? Это что?
Я понимаю, что структурно они представляют собой разные представления данных. Мне кажется, что списки ключевых слов в эликсире служат для усложнения языка с помощью исключительного синтаксиса (3 разных синтаксических варианта), перекрытие с использованием примеров с картами и неявное преимущество.
В чем преимущество использования списков ключевых слов?