8

我刚刚开始使用 Clojure,我想知道为什么以下内容不能按预期工作:

(-> 5
    -
    (partial + 5))

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

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

为什么会这样,我该怎么做?

4

1 回答 1

10

需要一组额外的括号:

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

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

于 2013-03-15T22:59:04.940 回答