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.

Reply via email to