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 

マクロは->、前の式の結果をリストの2番目の引数として挿入するため、例では(partial (- 5) + 5)、部分関数の後に挿入される余分な () で展開されます((partial + 5) (- 5))

于 2013-03-15T22:59:04.940 に答える