Typehints for functions are only useful on vars. There is no code anywhere, 
as far as I know, that looks at the metadata attached to anonymous 
functions.

On Monday, June 17, 2013 11:04:45 AM UTC-7, Ambrose Bonnaire-Sergeant wrote:
>
> I'm not sure. I guess we're stuck with tagging locals at that point?
>
> Thanks,
> Ambrose
>
>
> On Tue, Jun 18, 2013 at 1:38 AM, Jim - FooBar(); 
> <jimpi...@gmail.com<javascript:>
> > wrote:
>
>>  OK now I'm confused! If you are using an unnamed  fn form there is only 
>> one place to put the return type-hin,t and that is between the 'fn' and the 
>> '[...]'
>> ...but, you've just demonstrated that this causes reflection...where else 
>> can we put it?
>>
>> Jim
>>
>>
>> On 17/06/13 18:33, Ambrose Bonnaire-Sergeant wrote:
>>  
>> Seems like there's some trickery involved with using Vars. 
>>
>>  This example seems to use reflection.
>>
>>  user=> (.length ((fn ^String [^String s] (.substring s 0 (.length s))) 
>> "a"))
>> Reflection warning, NO_SOURCE_PATH:1:1 - reference to field length can't 
>> be resolved.
>> 1
>>
>>  Thanks,
>> Ambrose
>>  
>>
>> On Tue, Jun 18, 2013 at 1:15 AM, Ambrose Bonnaire-Sergeant <
>> abonnair...@gmail.com <javascript:>> wrote:
>>
>>> Yes, it did. That's interesting. I have no idea where the .length method 
>>> is being inferred from in the last example. 
>>>
>>>  Carry on :)
>>>  
>>>  Ambrose
>>>   
>>>
>>> On Tue, Jun 18, 2013 at 1:10 AM, Jim - FooBar(); 
>>> <jimpi...@gmail.com<javascript:>
>>> > wrote:
>>>
>>>>  so how about this then?
>>>>
>>>>
>>>> nREPL server started on port 43830
>>>> REPL-y 0.2.0
>>>> Clojure 1.5.1
>>>>     Docs: (doc function-name-here)
>>>>           (find-doc "part-of-name-here")
>>>>   Source: (source function-name-here)
>>>>  Javadoc: (javadoc java-object-or-class-here)
>>>>     Exit: Control+D or (exit) or (quit)
>>>>
>>>> user=> (set! *warn-on-reflection* true)
>>>> true
>>>> user=> (defn foo [^String s] (.substring s 0 (.length s)))
>>>> #'user/foo
>>>> user=> (foo "jim")
>>>> "jim"
>>>> user=> (.length (foo "jim"))
>>>> *Reflection warning, NO_SOURCE_PATH:1:1 - reference to field length 
>>>> can't be resolved.*
>>>> 3
>>>> user=> (defn foo ^String [^String s] (.substring s 0 (.length s)))
>>>> #'user/foo
>>>> user=> (.length (foo "jim"))
>>>> 3
>>>> user=> (defn ^String  foo [^String s] (.substring s 0 (.length s)))
>>>> #'user/foo
>>>> user=> (.length (foo "jim"))
>>>> 3
>>>>
>>>>
>>>> it worked both times didn't it?
>>>>
>>>> Jim 
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 17/06/13 17:59, Ambrose Bonnaire-Sergeant wrote:
>>>>    
>>>> After some investigation, the before-the-arglist syntax only seems 
>>>> useful for defining fn's that return primitive types. 
>>>> They don't seem to help resolve reflection calls.
>>>>
>>>>  (require '[clojure.tools.analyzer :refer [ast]])
>>>>
>>>>  ; this creates a double-emitting fn
>>>>
>>>>  (ast (fn (^double [^double a] a)))
>>>> ; =>
>>>>  ;{:op :fn-expr,
>>>> ; ...
>>>> ; :methods
>>>>  ; ({:op :fn-method,
>>>> ;   ...
>>>> ;   :arg-types (#<Type Ljava/lang/Object;>),
>>>>  ;   :return-type #<Type D>}),   ;double return type here
>>>> ;  ...
>>>> ; :tag nil}  ; no tag
>>>>  
>>>>   ; this creates a regular old fn
>>>>
>>>>  (ast (fn (^String [a] 1))) 
>>>> ; =>
>>>> ;{:op :fn-expr,
>>>>   ; ... 
>>>> ; ({:op :fn-method,
>>>> ;   ...
>>>> ;   :arg-types (#<Type Ljava/lang/Object;>),
>>>> ;   :return-type #<Type Ljava/lang/Object;>}),  ;object return type
>>>> ; ...
>>>> ; :tag nil}  ; no tag
>>>>  
>>>>  ; this creates a String-hinted fn
>>>>
>>>>   (ast ^String (fn a [a] 1))
>>>>  ;{:op :meta,
>>>> ; ...
>>>>  ; :expr
>>>> ; {:op :fn-expr,
>>>> ;  ...
>>>> ;  :methods
>>>> ;  ({:op :fn-method,
>>>> ;    :arg-types (#<Type Ljava/lang/Object;>),
>>>>  ;    :return-type #<Type Ljava/lang/Object;>}),
>>>> ;  ...
>>>> ;  :tag String}}
>>>>  
>>>>  I don't see where before-the-arglist is useful outside of primitive 
>>>> fns.
>>>>  
>>>>  Thanks,
>>>> Ambrose
>>>>
>>>> On Mon, Jun 17, 2013 at 7:59 PM, Jim - FooBar(); 
>>>> <jimpi...@gmail.com<javascript:>
>>>> > wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> It seems to me that return type-hints can go either right after 
>>>>> "defn", or after the doc-string. I generally, put the return type-hints 
>>>>> right before the argument vector and it seems to get rid of reflection. 
>>>>> However, I just had a look at core.contrib.strutils2 and the author(s) 
>>>>> put 
>>>>> the type hint right after 'defn' (before the var about to be defined) and 
>>>>> again it gets rid of reflection! Which one is it? both are acceptable?
>>>>>
>>>>> thanks in advance,
>>>>>
>>>>> Jim
>>>>>
>>>>> -- 
>>>>> -- 
>>>>> 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 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 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 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 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.


Reply via email to