variables - (部分 apply str)和 clojure 中的 apply-str ->

标签 variables clojure partial

如果我执行以下操作:

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/

相关文章:

c++ - 方法中的静态局部变量是一种不好的做法?

xml-parsing - Clojure Leining REPL OutOfMemoryError Java 堆空间

Elasticsearch:使用 Ngrams 评分

java - JSF 多个部分验证场景

bash - 为什么仅在其中一种情况下,别名内的变量扩展有效 "as intended"?

ios - 访问其他类中的变量

java - java中的静态概念

Clojure - map 索引是否可以从 0 以外的索引开始?

oauth - 使用 clj-oauth 的问题

c# - 计算类计数的部分语法