Bre*_*dan 1 lisp jvm clojure clojure-repl
这是一个 Clojure REPL 会话:
moon.core> Double
java.lang.Double
moon.core> (Double/parseDouble "1.0")
1.0
moon.core> Double/parseDouble
CompilerException java.lang.RuntimeException: Unable to find static field: parseDouble in class java.lang.Double, compiling:(*cider-repl moon*:1:7159)
Run Code Online (Sandbox Code Playgroud)
我可以引用Double,也可以调用 Double/parseDouble,但不能直接引用。对于 Java 标准库中的其他类方法(例如Math/abs,Integer/parseInt),我看到了相同的结果。为什么?
如果您想将静态 Java 方法转换为可以视为第一类事物的 Clojure 函数,您可以轻松地将一个函数包装在它周围:
(def pd #(Double/parseDouble %))
#'user/pd
(pd "1.0")
1.0
Run Code Online (Sandbox Code Playgroud)
该memfn函数可用于对 Java 实例方法执行类似操作。