Monday, December 16, 2013

-> and ->>

-> : thread-first macro
it puts the first argument as (always) the 1st parameter of later forms/functions. e.g.
(first (.split (.replace (.toUpperCase "a b c d") "A" "X")  " "))
;; ⇒ "X"

;; Perhaps easier to read:
(-> "a b c d"
          .toUpperCase
          (.replace "A" "X")
          (.split " ")
          first)
;; ⇒ "X"

->> : thread-last macro
it puts the first argument as (always) the last parameter of later forms/functions. e.g.
user=> (reduce +
              (take 10
                    (filter even?
                            (map #(* % %)
                                 (range)))))
;; ⇒ 1140

(->> (range)
           (map #(* % %))
           (filter even?)
           (take 10)
           (reduce +))
;; ⇒ 1140

No comments:

Post a Comment