W eliksirze mamy mapy:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Mamy również listy słów kluczowych:
> 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)
Dlaczego jedno i drugie?
Składnia? Czy dzieje się tak dlatego, że listy słów kluczowych mają bardziej elastyczną składnię, dzięki czemu mogą być definiowane bez zawiasów, a nawet bez nawiasów jako ostatni parametr wywołania funkcji? Dlaczego więc nie dać Mapom tego cukru syntaktycznego?
Zduplikowane klucze? Czy to dlatego, że listy słów kluczowych mogą mieć zduplikowane klucze? Dlaczego chcesz mieć zarówno dostęp w stylu mapy, jak i zduplikowane klucze?
Występ? Czy to dlatego, że listy słów kluczowych mają lepszą wydajność? Dlaczego więc masz Mapy? I czy mapy nie powinny skuteczniej wyszukiwać członków według klucza niż lista krotek?
JS Array i Ruby Hash jak wygląd? Czy to to?
Rozumiem, że strukturalnie są to różne reprezentacje danych. Wydaje mi się, że listy słów kluczowych w eliksirze komplikują język poprzez wyjątkową składnię (3 różne warianty składni), przypadki użycia pokrywają się z mapami i niejasne korzyści.
Jakie są zalety korzystania z list słów kluczowych?
Główną zaletą list słów kluczowych jest zgodność wsteczna z istniejącymi bazami kodów eliksirów i erlang.
Dodają również cukier składniowy, jeśli są używane jako argumenty funkcji, które przypominają np. Składnię ruby:
Główną wadą korzystania z list słów kluczowych jest to, że nie można na nich przeprowadzić częściowego dopasowania do wzorca:
Rozszerzmy to na argumenty funkcji. Wyobraź sobie, że musimy obsłużyć funkcję wielokrotnego użytku opartą na wartości jednej z opcji:
To nigdy nie wykona
do_special_thing
:Z argumentami mapy zadziała:
źródło
Mapy pozwalają tylko na jeden wpis dla określonego klucza, podczas gdy listy słów kluczowych pozwalają na powtórzenie klucza. Mapy są wydajne (zwłaszcza gdy rosną) i można ich używać w dopasowywaniu wzorców Elixiru.
Ogólnie rzecz biorąc, używaj list słów kluczowych do takich rzeczy, jak parametry wiersza poleceń i do przekazywania opcji, a także używaj map (lub innej struktury danych, HashDict), gdy potrzebujesz tablicy asocjacyjnej.
źródło