(部分应用str)和在clojure中使用apply-str - >

Jas*_*ker 5 variables clojure partial

如果我执行以下操作:

user=> (-> ["1" "2"] (partial apply str)) 
#<core$partial__5034$fn__5040 clojure.core$partial__5034$fn__5040@d4dd758>
Run Code Online (Sandbox Code Playgroud)

......我得到了部分功能.但是,如果我将它绑定到变量:

user=> (def apply-str (partial apply str))
#'user/apply-str
user=> (-> ["1" "2" "3"] apply-str)       
"123"
Run Code Online (Sandbox Code Playgroud)

......代码按照我的意图运作.我认为它们是相同的,但显然事实并非如此.有人可以解释为什么这对我来说?

Tag*_*ith 6

- >是一个宏,因此它不必遵循您在应用程序方面所期望的规则.宏在评估表单之前转换源.尝试宏扩展表单:

user> (macroexpand '(-> ["1" "2"] (partial apply str)))
(partial ["1" "2"] apply str)
Run Code Online (Sandbox Code Playgroud)

你想通过使用' - >'宏来实现什么?

编辑:请注意:

user> ((partial apply str) ["1" "2"])
"12"
Run Code Online (Sandbox Code Playgroud)


Ray*_*yne 5

你根本不需要这样做.

(->> ["1" "2" "3"] (apply str))
Run Code Online (Sandbox Code Playgroud)

为什么不这样做呢?