我正在学习Clojure,并遇到了这个例子:
(defn people-in-scenes [scenes]
(->> scenes
(map :subject)
(interpose ", ")
(reduce str)))
->>
这个操作符到底是干什么用的?
我正在学习Clojure,并遇到了这个例子:
(defn people-in-scenes [scenes]
(->> scenes
(map :subject)
(interpose ", ")
(reduce str)))
->>
这个操作符到底是干什么用的?
->>
是“thread-last”宏。它评估一个表单并将其作为最后参数传递到下一个表单中。
你的代码等同于:
(reduce str (interpose ", " (map :subject scenes)))
或者,用另一种方式来看:
(reduce str
(interpose ", "
(map :subject scenes)))
阅读Clojure代码时,几乎必须从“内向外”或从“底部向上”进行阅读。线程宏允许您按照某些人所说的更逻辑的顺序阅读代码。“获取某些内容,首先对其执行此操作,然后执行此操作,接下来执行...”。
->
,它将函数作为第二个参数传递到下一个表单中。(->> 10
(range)
(filter odd?)
(map #(* 2 %))
(reduce +))
(reduce + (map #(* 2 %) (filter odd? (range 10))))
如果你来自javascript或C#,第一个例子读起来像是在javascript中使用linq或点链接。
range(10).filter(odd)
.map(x => x * 2)
.reduce((a,b) => a + b)