summaryrefslogtreecommitdiffhomepage
path: root/clojure.html.markdown
diff options
context:
space:
mode:
authorKristin Linn <klinn@upenn.edu>2015-10-20 16:26:35 -0400
committerKristin Linn <klinn@upenn.edu>2015-10-20 16:26:35 -0400
commit396e6f5d9708f827512c4699240f72477366ff76 (patch)
treed63b41a4d91ea80c594574c48fc6416d6fd9a538 /clojure.html.markdown
parent11aab085d656b79482e92a05acbbac81125bfb78 (diff)
parent5fb5dd7c7fd7670faca6b8cfff9ef1ffdbd65c0d (diff)
Merge branch 'master' of https://github.com/adambard/learnxinyminutes-docs
Diffstat (limited to 'clojure.html.markdown')
-rw-r--r--clojure.html.markdown25
1 files changed, 25 insertions, 0 deletions
diff --git a/clojure.html.markdown b/clojure.html.markdown
index a125d18f..58e835c9 100644
--- a/clojure.html.markdown
+++ b/clojure.html.markdown
@@ -264,6 +264,31 @@ keymap ; => {:a 1, :b 2, :c 3}
(print "Saying hello to " name)
(str "Hello " name)) ; => "Hello Urkel" (prints "Saying hello to Urkel")
+
+; Use the threading macros (-> and ->>) to express transformations of
+; data more clearly.
+
+; The "Thread-first" macro (->) inserts into each form the result of
+; the previous, as the first argument (second item)
+(->
+ {:a 1 :b 2}
+ (assoc :c 3) ;=> (assoc {:a 1 :b 2} :c 3)
+ (dissoc :b)) ;=> (dissoc (assoc {:a 1 :b 2} :c 3) :b)
+
+; This expression could be written as:
+; (dissoc (assoc {:a 1 :b 2} :c 3) :b)
+; and evaluates to {:a 1 :c 3}
+
+; The double arrow does the same thing, but inserts the result of
+; each line at the *end* of the form. This is useful for collection
+; operations in particular:
+(->>
+ (range 10)
+ (map inc) ;=> (map inc (range 10)
+ (filter odd?) ;=> (filter odd? (map inc (range 10))
+ (into [])) ;=> (into [] (filter odd? (map inc (range 10)))
+ ; Result: [1 3 5 7 9]
+
; Modules
;;;;;;;;;;;;;;;