Clojure - 部分在` - >`宏

时间:2013-03-15 22:48:39

标签: clojure

我刚刚开始使用Clojure,我想知道为什么以下内容无法正常工作:

(-> 5
    -
    (partial + 5))

我希望这个表达式的结果为0(-5 + 5),但整个事情似乎是偏的。

(macroexpand `(-> 5 - (partial + 5))
  #_=> )
(clojure.core/partial (clojure.core/-> 5 clojure.core/-) clojure.core/+ 5)

为什么会这样,我怎么能做我想做的事?

1 个答案:

答案 0 :(得分:10)

需要一套额外的parens:

user> (-> 5 - ((partial + 5)))                                                                                                                                            
0 

->宏将前一个表达式的结果作为列表中的第二个参数插入,因此在您的示例中,它将扩展到(partial (- 5) + 5),并且在部分函数{之后插入extra() {1}}