티스토리 뷰
List, Map, Vector같은 자료구조에서 특정한 값을 골라 바인딩하는 방법을 알아보겠다.
먼저 테스트에 사용될 중첩된 Vector를 정의한다.
(def vec [[0 1] [2 3]])
Vector를 받는 함수를 정의하면서 매개변수단에서 두 번째 벡터의 첫 번째 값인 2를 추출하여 바인딩 해보겠다.
(defn get-third [[_ [item _]] (str item " get complete"))
대강 봐서는 무슨소리인지 눈에 들어오지도 않을것이다.
해석해보자면 [[_ [item _]] 에서 굵게 표시된 부분은 함수의 파라미터란 뜻이다. (이전 글에서 언급한 적이 있다.)
또한 [[_ [item _]] 에서 굵게 표시된 안쪽 대괄호는 [[0 1] [2 3]] 에서 굵게 표시된 바깥 대괄호를 뜻한다.
그리고 [[_ [item _]] 에서 빨간색으로 표시된 첫 번째 언더바(_)는 [[0 1] [2 3]] 굵게 표시된 첫 번째 요소 벡터를 의미한다.
[[_ [item _]] 요소는 [[0 1] [2 3]] 이고, [[_ [item _]]은 [[0 1] [2 3]], [[_ [item __]]은 [[0 1] [2 3]] 을 의미한다.
대강 감이 왔을 것 같은데 함수의 파라미터를 표시하는 바깥 대괄호를 제외한 [[_ [item _]] 의 패턴은 vec변수인 벡터 [[0 1] [2 3]] 의 패턴과 일치한다.
언더바(_)는 제외할 요소를 지정하는 것이고, item은 그 순서에 해당하는 요소를 item이라는 변수에 담는 것이다.
즉 [[0 1] [2 3]] 에서 2를 item이라는 변수에 담았으니 바인딩 부분에서 (str item " get complete") 을 실행하면 "2 get complete" 가 출력될 것이다.
다른 예로 매개변수에 [[_ [_ item]] 을 지정하면 "3 get complete" 가 출력될 것이다.
분해는 let 함수를 통해서도 할 수 있는데 let 함수의 뼈대는 아래와 같다
(let [매개변수 분해하려는Collection] (바인딩))
위와 같은 방법으로 첫 번째 벡터의 두 번째 요소인 1을 추출해보겠다.
(let [[[_ item] _] line] (str item " get complete"))
대부분 사용법은 함수와 같지만 살짝 다른점은 (let [[[_ item] _] line] (str item " get complete")) 과 같이 분해하려는 Collection이 담긴 변수를 넘겨야 한다는 점이다.
위의 결과로는 첫 번째 벡터의 두 번째 요소인 1이 추출되었으므로 "1 get complete"가 출력된다.
'Clojure' 카테고리의 다른 글
[Clojure] 클로저에서 함수 정의 및 호출 (0) | 2015.11.25 |
---|---|
[Clojure] 클로저의 자료구조3 (맵) (0) | 2015.11.24 |
[Clojure] 클로저의 자료구조2 (벡터) (0) | 2015.11.24 |
[Clojure] 클로저의 자료구조1 (리스트) (0) | 2015.11.24 |
[Clojure] 클로저의 수식 연산 (0) | 2015.11.24 |
- Total
- Today
- Yesterday
- opensource
- gitlab
- 메모리
- Java
- Docker
- 시간
- 자바 성능
- 자바
- Clojure
- 클로저
- 컴퓨터 시간
- Stream
- 람다
- Jackson
- 퍼포먼스
- Swift 2.0
- 성능개선
- 알람
- RAMDA
- 성능
- javascript
- Java8
- 리액트
- 프로세서
- 날짜
- 자료구조
- rambda
- json
- 코어
- react
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |