[英]Juxtaposition of Java instance methods in Clojure
是否可以在Clojure juxt
与Java对象的方法结合使用?
基本上我想要达到的是
((juxt .method1 .method2) myinstance)
与.method1
和method2
的是实例方法myinstance
,这是一些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"]]]
尝试将方法调用封装在匿名函数中:
((juxt #(.method1 %) #(.method2 %)) myinstance)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.