string - 如何通过静态方法在 clojure 中进行 comp ?

标签 string vector clojure integer

我似乎在访问 Integer.parseInt 时遇到问题在补偿我可以像这样正常访问它:

user=> (Integer/parseInt "123")
123

但是如果我把它放在 comp 中,我会得到一个错误:
user=> (def vect-to-int (comp Integer/parseInt (partial apply str)))
java.lang.Exception: Unable to find static field: parseInt in class java.lang.Integer (NO_SOURCE_FILE:3)

在我看来,当它应该寻找方法时,它试图在 Integer 上找到一个字段。我如何使用 Integer.parseInt像这样?是否有更好的方法将字符向量转换为 int ?

最佳答案

Clojure 函数是 java 方法,但 java 方法不是 clojure 函数例如 Clojure 函数具有元数据等。如果你想使用一个调用 Clojure 函数的 java 方法,那么你有两个选择来包装它,memfnfun or #( ) memfn 是一个过时的函数,它在 clojure 函数中包装了一个 java 方法(即使不经常使用它,也很高兴知道它存在)。包装java方法的普遍接受的方法是:

#(. instance method arg1 argN)  

或者对于静态方法
#(Class/MethodName arg1 argN)

关于string - 如何通过静态方法在 clojure 中进行 comp ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208865/

相关文章:

clojure - 数据查询和懒惰

string - XE7 中的 Str 生成奇怪的警告

java - Java 中 Postgresql 日期从时间戳到字符串

c++ - 尝试将代码简化为移动语义的基于范围的 for 循环时,不匹配 ‘operator[]'

c++ - 累积没有给出我的 vector 的正确总和

c++ - 如何在 C++ 容器中向左移动元素(以实现删除)?

python - 需要为每个字符串创建一个数组的数组

c - 我有一个字符串(即 char* str),当我将它与空字符串(即 *str != "\0")进行比较时,我得到一个错误。出了什么问题?

java - Android 中的 Groovy、Scala、Clojure 等脚本

clojure - 在ClojureScript中,延迟 `:on-click`事件,仅在 `:on-double-click`事件未触发时触发