Sorry for the confusion, type annotations do work in the evaluated code. I just didn't supply enough of them.
Although I'm still not sure if they will work in all cases, as per http://stackoverflow.com/questions/11919602/generating-clojure-code-with-type-hints . On Wednesday, 4 December 2013 23:22:36 UTC+2, dm3 wrote: > > 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> 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 >>> 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 >>> --- >>> 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/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.