This would work if I knew the type of the function arguments. It doesn't seem to work when type-hinting on the constructor call.
On Wednesday, 4 December 2013 22:31:53 UTC+2, James Reeves wrote: > > Try something like: > > (let [x (with-meta (gen-sym) {:tag String}] > (defn foo [~x] ...)) > > - James > > > On 4 December 2013 19:55, dm3 <dead...@gmail.com <javascript:>> wrote: > >> Hello, >> >> I've been having a little problem when trying to generate java interop >> code and avoid reflection warnings. I have to generate a bunch of >> functions which delegate to java constructors, like this: >> >> (defn mk-a [x y z] (A. x y z)) >> (defn mk-b [x y z] (B. x y z)) >> >> The main reason here is to be able to `apply` the functions to lists of >> arguments, as java constructors cannot be applied (AFAIK, would be great if >> I'm wrong - would solve a lot of my problems!). >> >> The problem is - java constructors are overloaded: >> >> A(String x, int y, int z) >> A(BigDecimal x, String y, int z) >> ... >> >> I was trying to generate such functions in my top-level form, like this: >> >> (doseq [[java-ctor fn-name] [['A. 'mk-a] [B'. 'mk-b]] >> (eval `(defn ~fn-name [x# y# z#] >> (cond (string? x#) >> (~java-ctor ^String x# y# z#) >> >> (string? y#) >> (~java-ctor x# ^String y# z#)))) >> >> Which still generates reflection warnings as type hints are read by the >> reader and applied to the forms read by the eval, not the result of the >> eval itself (please, correct me if I'm wrong here). >> >> I have a suspicion that the way I'm approaching the problem is wrong :) >> How should I go around solving this problem? >> >> -- >> -- >> 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<javascript:> >> 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 <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- -- 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/groups/opt_out.