Destructuring (Clojure)
http://blog.jayfields.com/2010/07/clojure-destructuring.html
パターンマッチの勉強をしていたら、(core.match)
どうも、Destructuringと同じ記法にしています、という話がでてきたので、
destructuringを調べてみた。
↓こんな感じらしい
(def vector-test [1 2 3]) (let [[a b c d] vector-test ] (println d)) ;; nil (let [[a & more ] vector-test ] (println more)) ;; (2,3) この書き方は、head と tail にベクターを分けるのに便利。なぜか、VectorがListになってるけど。。 (let [[a b ] vector-test ] (println b)) ;; 2 (let [[a b :as full ] vector-test ] (println b) (println full)) ;; 2 ;; [1 2 3]
ちなみに、listにも適用できるようですが、
( 上のvector-test が list-test でもよさそう)
束縛する変数側は、ベクター形式で書いておくようです。
Mapのdestructureは
(def map-test {:x 5 :y 7}) (let [{a :x b :y} map-test] (println a b )) ;; 5 7
このような感じ