clojure-koans/src/koans/14_destructuring.clj

42 lines
1.3 KiB
Clojure
Raw Normal View History

2010-11-12 00:16:55 +00:00
(def test-address
{:street-address "123 Test Lane"
:city "Testerville"
:state "TX"})
2010-11-06 22:38:31 +00:00
(meditations
"Destructuring is an arbiter: it breaks up arguments"
2010-11-06 22:38:31 +00:00
(= __ ((fn [[a b]] (str b a))
2011-10-26 02:55:54 +00:00
[:foo :bar]))
"Whether in function definitions"
(= (str "First comes love, "
"then comes marriage, "
"then comes Clojure with the baby carriage")
((fn [[a b c]] __)
2011-10-26 02:55:54 +00:00
["love" "marriage" "Clojure"]))
"Or in let expressions"
(= "Rich Hickey aka The Clojurer aka Go Time aka Macro Killah"
(let [[first-name last-name & aliases]
2011-10-26 02:55:54 +00:00
(list "Rich" "Hickey" "The Clojurer" "Go Time" "Macro Killah")]
__))
"You can regain the full argument if you like arguing"
2014-01-27 09:52:03 +00:00
(= {:original-parts ["Stephen" "Hawking"] :named-parts {:first "Stephen" :last "Hawking"}}
(let [[first-name last-name :as full-name] ["Stephen" "Hawking"]]
__))
2010-11-12 00:16:55 +00:00
"Break up maps by key"
(= "123 Test Lane, Testerville, TX"
(let [{street-address :street-address, city :city, state :state} test-address]
2011-10-26 02:55:54 +00:00
__))
2010-11-12 00:16:55 +00:00
"Or more succinctly"
(= "123 Test Lane, Testerville, TX"
(let [{:keys [street-address __ __]} test-address]
2011-10-26 02:55:54 +00:00
__))
2010-11-12 00:16:55 +00:00
"All together now!"
(= "Test Testerson, 123 Test Lane, Testerville, TX"
2011-10-26 02:55:54 +00:00
(___ ["Test" "Testerson"] test-address)))