我似乎在访问 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 方法,那么你有两个选择来包装它,memfn
和 fun or #( )
memfn 是一个过时的函数,它在 clojure 函数中包装了一个 java 方法(即使不经常使用它,也很高兴知道它存在)。包装java方法的普遍接受的方法是:
#(. instance method arg1 argN)
或者对于静态方法
#(Class/MethodName arg1 argN)
关于string - 如何通过静态方法在 clojure 中进行 comp ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208865/