gpt4 book ai didi

clojure - 如何获取 Java 静态方法的 clojure 句柄,类似于 Java 实例方法的 _memfn_ ?

转载 作者:行者123 更新时间:2023-12-02 14:02:36 25 4
gpt4 key购买 nike

要获取稍后可以调用的 Java 实例方法的句柄,我们可以调用 memfn 函数:

user=> (def g (memfn Integer/toString))
#'user/g

user=> (g 789)
"789"

这不适用于 Java 静态方法:

user=> (def g (memfn Integer/toHexString))
#'user/g

user=> (g 789)
IllegalArgumentException No matching method found: toHexString for class java.lang.Long clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:52)

user=> (g)
ArityException Wrong number of args (0) passed to: user$g clojure.lang.AFn.throwArity (AFn.java:437)

我们如何获取 Java 静态方法的句柄,以便稍后调用它?

最佳答案

(defn g [x] (Integer/toHexString x))...?如果需要,您可以将其封装在宏中,但没有什么可做的:

(defmacro static-fn [f] `(fn [x#] (~f x#)))
(def g (static-fn Integer/toHexString))

关于clojure - 如何获取 Java 静态方法的 clojure 句柄,类似于 Java 实例方法的 _memfn_ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8623109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com