Как получить дескриптор clojure для статического метода Java, похожего на _memfn_ для метода экземпляра Java? - PullRequest
3 голосов
/ 24 декабря 2011

Чтобы получить дескриптор метода экземпляра 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, чтобы мы могли вызвать его позже?

1 Ответ

7 голосов
/ 24 декабря 2011

(defn g [x] (Integer/toHexString x)) ...?Если вы хотите, вы можете обернуть это в макрос, но ничего не остается сделать:

(defmacro static-fn [f] `(fn [x#] (~f x#)))
(def g (static-fn Integer/toHexString))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...