我很难理解刺伤 - > Clojure简写

时间:2015-02-02 10:08:31

标签: clojure

在Clojure中,( - > ...... ......)是什么意思?改变事物的顺序会产生不同的输出。

(defn my-method
  "description"
  [& args]
  (-> things/thing1
      things/thing2
      things/thing3
      things/thing4
      things/thing5))

2 个答案:

答案 0 :(得分:5)

这是"thread-first"宏:

(-> a b c)

相当于

(c (b a))

基本上这个宏用于避免嵌套大量表单。它只是插入第一个表单作为第二个表单的第一个参数:(-> a b)变为(b a)。然后将结果表单作为第三个表单的第一个参数插入:(-> (b a) c)变为(c (b a))。所以,你的例子相当于:

(defn my-method
  "description"
  [& args]
  (things/thing5 (things/thing4 (things/thing3 (things/thing2 things/thing1)))))

答案 1 :(得分:2)

(doc)是一个在Clojure REPL中运行的便捷实用程序。它应该处于日常发展的角落。

  

用户=> (doc - >)
      clojure.core / - >
      ([x& forms])
      宏
      通过表单线程化expr。插入x作为     第一个表单中的第二个项目,如果它不是a,则列出它     列表已经。如果有更多表单,请插入第一个表单作为     第二种形式的第二项,等等。