gpt4 book ai didi

java - Clojure中Java实例方法的并列

转载 作者:行者123 更新时间:2023-11-29 09:59:46 25 4
gpt4 key购买 nike

是否可以将 juxt 与 Clojure 中的 Java 对象的方法结合使用?

基本上我想要实现的是

((juxt .method1 .method2) myinstance)

.method1method2myinstance 的实例方法,它是某个 Java 类的实例。

感谢您的帮助!

最佳答案

或者只是为此制作一个宏,它将正常的 juxt 行为与 .method 行为结合起来。像这样:

user> (defmacro juxt+ [& fns]
(let [x (gensym)]
`(fn [~x] ~(mapv #(list % x) fns))))
#'user/juxt+

例如:

(juxt+ .getName (partial str "string val: ") .getAbsolutePath vector)

扩展为以下内容:

(fn*
([G__19829]
[(. G__19829 getName)
((partial str "string val: ") G__19829)
(. G__19829 getAbsolutePath)
(vector G__19829)]))

回复:

user> ((juxt+ .getName 
(partial str "string val: ")
.getAbsolutePath
vector)
(java.io.File. "aaa"))

["aaa"
"string val: aaa"
"/Users/.../aaa"
[#object[java.io.File 0x34c3af49 "aaa"]]]

关于java - Clojure中Java实例方法的并列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39146517/

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