Clojure线程第一个宏 - >使用Math/pow或任何其他多个args函数

aka*_*lou 1 macros clojure

如何在一行中写下以下代码:

(-> 10 pow9)
Run Code Online (Sandbox Code Playgroud)

pow9是哪里的:

(def pow9 (partial #(Math/pow % 9)))
Run Code Online (Sandbox Code Playgroud)

如果我写,(-> 10 (partial #(Math/pow % 9)))我会回来#<core$partial$fn__4228 clojure.core$partial$fn__4228@62330c23>,写作(-> 10 #(Math/pow % 9))失败CompilerException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.ISeq, compiling:(NO_SOURCE_PATH:1:1),

虽然(-> 10 pow9)工作正常.

更一般的问题是如何使用 - > with function接受多个参数,即如何使其工作(-> 10 #(+ % 10))

muh*_*huk 5

->将先前结果作为第一个参数->>插入,将前一个结果作为最后一个参数插入.

user=> (-> 10 (Math/pow 9))
1.0E9

user=> (-> 10 ((partial #(Math/pow % 9))))
1.0E9
Run Code Online (Sandbox Code Playgroud)

注意额外的parens.

实际上你根本就不需要局部:

user=> (defn pow9 [x] (Math/pow x 9))
#'user/pow9
user=> (-> 10 pow9)
1.0E9
Run Code Online (Sandbox Code Playgroud)