2015-02-05 13 views
7

W eliksiru, możemy złączyć, listy takie jak takoddzielając krotki w eliksiru

ex(52)> [1,2,3,4] ++ [5,6,7] 
[1, 2, 3, 4, 5, 6, 7] 

możemy również łączyć krotki? Coś takiego?

iex(53)> {1,2,3,4} ++ {5,6,7} 
** (ArgumentError) argument error 
    :erlang.++({1, 2, 3, 4}, {5, 6, 7}) 

Jedyne co mogę myśleć jest konwersja krotka do listy, a następnie przekształcić z powrotem do krotka użyciem funkcji to_list i to_tuple. Ale to zbyt niezdarne.

Odpowiedz

21

Nie można łączyć krotek.

Jedynym powodem jest to, że nie należy ich używać jako takich. Większość korzystania z krotek wymaga znajomości ich wielkości, a rzeczy stają się bardziej rozmyte, jeśli możesz je połączyć. Ponadto łączenie krotek wymaga skopiowania obu krotek w pamięci, co nie jest wydajne.

Innymi słowy, jeśli chcesz łączyć krotki, możesz mieć nieprawidłową strukturę danych. Masz dwie opcje:

  1. używać list
  2. skomponować krotki: zamiast a ++ b, wystarczy napisać {a, b}
+0

dzięki, że ma sens! – User314159

+0

Jeśli mam sytuację, w której mam 2 krotki i chcę do nich dołączyć, jak mam to zrobić? Czy musiałbym przekonwertować krotki na listę, a następnie połączyć, a następnie przekonwertować ją z powrotem na krotkę? – CMCDragonkai

+4

Uwielbiam, gdy projektanci języków odpowiadają na pytania. Nie można już być bardziej oficjalnym. – Dty