What about eval?

user =>  (eval `(. ~(resolve (symbol "String")) ~(symbol "format") "%s" 
(to-array ["adasd"])))
“adasd"

I have a function form:

(defn static-invoke
  [c meth & args]
  (eval `(. ~(resolve (symbol c)) ~(symbol meth) ~@args)))

Which works for some things:

user => (static-invoke “System” “currentTimeMillis”)
1432171781154

But the String thing was problematic:

user => (static-invoke "String" "format" "a %s” (quote (to-array ["foo”])))
“a foo”

(This gave a weird error until I quoted the to-array form.)

Still not helpful?


> On May 20, 2015, at 6:09 PM, Ambrose Bonnaire-Sergeant 
> <abonnaireserge...@gmail.com> wrote:
> 
> Macros won't work because they are expanded at compile-time. We want to 
> choose the method at runtime.
> 
> Thanks,
> Ambrose
> 
> On Thu, May 21, 2015 at 9:02 AM, Keith Irwin <ke...@zentrope.com 
> <mailto:ke...@zentrope.com>> wrote:
> Not sure if this helps, but:
> 
> user => (eval (symbol "Math" "PI”))
> 3.141592653589793
> 
> user =>  (eval `(. ~(resolve (symbol "String")) ~(symbol "format") "%s" 
> (to-array ["adasd"])))
> “adasd"
> 
> Maybe a macro of some sort?
> 
> (defmacro invoke-static
>   [c meth & args]
>   `(. ~(resolve (symbol c)) ~(symbol meth) ~@args))
> 
> user => (invoke-static "java.lang.String" "format" "the %s" (to-array 
> ["foo"]))
> “the foo"
> 
> user=> (invoke-static "System" "currentTimeMillis")
> 1432170076378
> 
> That kind of thing?
> 
>> On May 20, 2015, at 4:54 PM, Pierre Thibault <pierre.thibau...@gmail.com 
>> <mailto:pierre.thibau...@gmail.com>> wrote:
>> 
>> I gave it a try:
>> 
>> (.. (class String) (getMethod "format" (into-array Class [String 
>> (Class/forName "[Ljava.lang.Object;")])))
>> 
>> But I am unable to get the method. I gave up.
>> 
>> Le mercredi 20 mai 2015 19:12:05 UTC-4, Pierre Thibault a écrit :
>> Hi Laurens,
>> 
>> My example was not very good. Here another one:
>> 
>> (.format (first '(String)) "%s" "foo")
>> 
>> Imagine String is obtained dynamically. I guess then I have to use Java 
>> reflection to do a dynamic invocation. I guess I am confused because classes 
>> in Java are not objects.
>> 
>> Le mercredi 20 mai 2015 18:40:13 UTC-4, Laurens Van Houtven a écrit :
>> Hi Pierre,
>> 
>>> On May 20, 2015, at 3:38 PM, Pierre Thibault <pierre.t...@gmail.com <>> 
>>> wrote:
>>> 
>>> I can do Math/PI put how can I access PI if Math is in a expression like 
>>> '(Math) for example?
>> 
>> Can you provide a more specific example? Math/PI is always Math/PI, it 
>> doesn’t change if you put it in a nested form/expression.
>> 
>> hth
>> lvh
>> 
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@googlegroups.com <>
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@googlegroups.com <>
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en 
>>> <http://groups.google.com/group/clojure?hl=en>
>>> --- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to clojure+u...@googlegroups.com <>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com 
>> <mailto:clojure@googlegroups.com>
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com 
>> <mailto:clojure+unsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en 
>> <http://groups.google.com/group/clojure?hl=en>
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+unsubscr...@googlegroups.com 
>> <mailto:clojure+unsubscr...@googlegroups.com>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com 
> <mailto:clojure@googlegroups.com>
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com 
> <mailto:clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en 
> <http://groups.google.com/group/clojure?hl=en>
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com 
> <mailto:clojure+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en 
> <http://groups.google.com/group/clojure?hl=en>
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com 
> <mailto:clojure+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to