繁体   English   中英

Java实例方法在Clojure中的并置

[英]Juxtaposition of Java instance methods in Clojure

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

基本上我想要达到的是

((juxt .method1 .method2) myinstance)

.method1method2的是实例方法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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM