如果我执行以下操作:
user=> (-> ["1" "2"] (partial apply str))
#<core$partial__5034$fn__5040 clojure.core$partial__5034$fn__5040@d4dd758>
...我恢复了部分功能。但是,如果我将它绑定(bind)到一个变量:
user=> (def apply-str (partial apply str))
#'user/apply-str
user=> (-> ["1" "2" "3"] apply-str)
"123"
...代码按我的预期工作。我认为它们是同一件事,但显然情况并非如此。有人能解释一下为什么我会这样吗?
最佳答案
-> 是一个宏,因此它不必遵循您在应用程序中期望的规则。宏在评估表单之前转换源。尝试宏扩展表单:
user> (macroexpand '(-> ["1" "2"] (partial apply str)))
(partial ["1" "2"] apply str)
您想通过使用“->”宏来实现什么目的?
编辑:请注意:
user> ((partial apply str) ["1" "2"])
"12"
关于variables - (部分 apply str)和 clojure 中的 apply-str ->,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576560/