In Elixier haben wir Karten:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Wir haben auch Keyword-Listen:
> 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)
Warum beides?
Syntax? Liegt es daran, dass Keyword-Listen eine flexiblere Syntax haben, mit der sie ohne Curlys und sogar ohne Klammern als letzter Parameter eines Funktionsaufrufs definiert werden können? Warum geben Sie Maps dann nicht diesen syntaktischen Zucker?
Doppelte Schlüssel? Liegt es daran, dass Keyword-Listen doppelte Schlüssel haben können? Warum sollten Sie sowohl Zugriff im Kartenstil als auch doppelte Schlüssel wünschen?
Performance? Liegt es daran, dass Keyword-Listen eine bessere Leistung haben? Warum dann Karten? Und sollten Karten nicht leistungsfähiger sein, wenn es darum geht, Mitglieder nach Schlüssel zu suchen, als eine Liste von Tupeln?
JS Array und Ruby Hash mögen Aussehen? Ist es das?
Ich verstehe, dass es sich strukturell um unterschiedliche Datendarstellungen handelt. Mir scheint, dass Keyword-Listen in Elixier dazu dienen, die Sprache durch außergewöhnliche Syntax (3 verschiedene syntaktische Varianten), Überschneidungen von Anwendungsfällen mit Karten und einen unklaren Vorteil zu komplizieren.
Was ist der Vorteil der Verwendung von Keyword-Listen?