Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中Java实例方法的并置_Java_Clojure - Fatal编程技术网

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"]]]