Elixir에서 가변 길이 LIST의 두 번째 값을 얻는 방법

6684 단어 작은 재료Elixir
Elixir에는 패턴 매치가 있기 때문에 요소 수를 알고있는 LIST이면 다음과 같은 느낌으로 걸립니다.
pry(1)> [a,b,c] = [1,2,3]
[1, 2, 3]
pry(2)> IO.puts b
2
:ok

그런데 요소수를 모르면 에러가 되어 버린다.
pry(7)> [a, b] = [1,2,3,4,5]
** (MatchError) no match of right hand side value: [1, 2, 3, 4, 5]

패턴 매치이므로 매치할 수 없는 요소가 있으면 에러가 되는 것은 당연하네요.

Elixir cons演算子 또는 hd 함수? 그래서 가변 길이 LIST에서도 요소의 시작을 얻는 것은 간단합니다.
pry(14)> head = hd [1,2,3,4,5]
1

pry(15)> [head|_] = [1,2,3,4,5]
[1, 2, 3, 4, 5]
pry(16)> head
1

이번에는 이 두 번째를 원합니다.
hdtl 함수를 사용하여 LISP처럼 얻는 방법
pry(17)> hd(tl([1,2,3,4,5]))
2
carcdr를 구사하여 요소에 도착하는 느낌, 좋아!
그렇지만 이번은 2번째인 것이라도 조금 손을 빼고 싶다. 그래서 다음과 같이
pry(18)> [a,b|c] = [1,2,3,4,5]
[1, 2, 3, 4, 5]
pry(19)> b
2

↑의 방법이라면 c 이후는 가변 길이에 대응( tl 상당) 하는 데에 2번째의 요소가 무엇인가 보면 곧 알 수 있다!

코멘트에서 이하의 방법도 할 수 있다고 가르쳐 주셨다
그렇다면 이것이 다른 언어로 사용되는 잘하는 방식처럼 생각합니다
second = [1,2,3,4,5] |> Enum.at(1)

좋은 웹페이지 즐겨찾기