1

这是一个 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) 

我可以引用Double,也可以调用 Double/parseDouble,但不能直接引用。对于 Java 标准库中的其他类方法(例如Math/absInteger/parseInt),我看到了相同的结果。这是为什么呢?

4

2 回答 2

5

如果您想将静态 Java 方法转换为 Clojure 函数,您可以将其视为一流的东西,您可以轻松地将函数包装在它周围:

(def pd #(Double/parseDouble %))
#'user/pd
(pd "1.0")
1.0

memfn函数可用于对 Java 实例方法执行类似的操作。

于 2016-11-20T23:00:20.860 回答
3

这不起作用(在 REPL 或其他方式中),因为类上没有调用静态字段。 是一种方法。您可以调用它,但不能像访问字段一样访问它。parseDoubleDoubleparseDouble

于 2016-11-20T19:16:48.277 回答