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(); <jimpil1...@gmail.com <mailto:jimpil1...@gmail.com>> 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 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
    --- 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%2bunsubscr...@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.



--
--
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