Clojure中Java实例方法的并置
是否可以将Clojure中Java实例方法的并置,java,clojure,Java,Clojure,是否可以将juxt与Clojure中Java对象的方法结合使用 基本上我想要达到的是 ((juxt .method1 .method2) myinstance) 其中.method1和method2是myinstance的实例方法,它是某个Java类的实例 谢谢你的帮助 尝试在匿名函数中封装方法调用: ((juxt #(.method1 %) #(.method2 %)) myinstance) 尝试在匿名函数中封装方法调用: ((juxt #(.method1 %) #(.method2
juxt
与Clojure中Java对象的方法结合使用
基本上我想要达到的是
((juxt .method1 .method2) myinstance)
其中.method1
和method2
是myinstance
的实例方法,它是某个Java类的实例
谢谢你的帮助 尝试在匿名函数中封装方法调用:
((juxt #(.method1 %) #(.method2 %)) myinstance)
尝试在匿名函数中封装方法调用:
((juxt #(.method1 %) #(.method2 %)) myinstance)
或者只需为其创建一个宏,它将正常的
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
行为与.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"]]]