I have a java class with several static methods:
package org.domain.test;
public class My {
static public void sBar(String x, String y)
{ System.out.println("sBar "+x+":"+y); }
static public void sBaz(String x, String y)
{ System.out.println("sBaz "+x+":"+y); }
}
I'd like to execute these methods from clojure. The concrete method
will be specified at runtime.
test.clj:
(ns test)
(:import org.domain.test.My)
; this is what I need but it does not work:
(defn foo [f x y]
(. org.domain.test.My sBar x y) ;hard coded call of the
java static method sBar
;(. org.domain.test.My f x y)) ;compiler error
;(map #(. org.domain.test.My % x y) [f]) ;compiler error
;(apply (. org.domain.test.My f x y)) ;compiler error
;(. org.domain.test.My #(f) x y) ;compiler error
)
; this works but it's ugly:
(defn bar [f x y]
(let [s (str "(. org.domain.test.My " f " " ; method sBar or
sBaz
"\"" x "\" " ; String x
"\"" y "\")")] ; String y
(load-string s)))
; the actual call on the REPL is quite ugly and (I believe) also quite
inefficient and error-prone:
(bar "sBaz" "aaa" "bbb")
Do you know how to write the foo function without using load-string?
Thx in advance!
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en