*mostly* works, and since 1.8 only. The issue pre 1.8 is that since metadata on arglist is not evaluated, the type hint wasn't a fully qualified classname, forcing the user namespaces to import that Class.
Scenarios like this would break: (ns foo (:import my.Klass)) (defn foo ^Klass [] (Klass.)) (ns bar (:require foo)) (.method (foo/foo)) > On 12 Nov 2015, at 19:49, Leon Grapenthin <[email protected]> wrote: > > Does this mean putting it in the arglist always works and there is rarely a > practical reason to do anything else? > > On Thursday, November 12, 2015 at 8:36:20 PM UTC+1, Nicola Mometto wrote: > It.. depends :( > > If your type hint is a *primitive* then you want to put it in the arglist. If > you put it in the Var, the best case scenario is that you'll get either > reflection warnings or boxed maths, and the worst case scenario is a > Compiler/bytecode error. > > If your type hint is an array type hint (^objects, ^ints ..) you want to put > it in the arglist or in the Var as a quoted symbol (^{:tag 'objects}). > > If your type hint is a non primitive class, you want to put it in the Var or > in the arglist as a fully qualified symbol (not necessary anymore since 1.8) > > If your type hint is a string representing a class, you can safely put it in > either place. > >> On 12 Nov 2015, at 19:28, Michael Blume <[email protected] <javascript:>> >> wrote: >> >> Sorry, I'm confused now -- is the appropriate place to give a return type >> hint for a function the arg list and not the function name? I've always seen >> the function name hinted. >> >> On Thu, Nov 12, 2015 at 11:20 AM Nicola Mometto <[email protected] >> <javascript:>> wrote: >> Also just like the CLJ-1846 issue, this bit of code was valid pre 1.8 >> >>> On 12 Nov 2015, at 19:14, Nicola Mometto <[email protected] <javascript:>> >>> wrote: >>> >>> >>> Depends on how you look at it. >>> From my point of view, both examples are using an otherwise valid type >>> hint, at an invalid location, and in both cases the emitted code is >>> nonsensical. >>> So I'd say that if the decision for the CLJ-1846 issue was to handle that >>> with a compile time error, this one should too. >>> >>> >>>> On 12 Nov 2015, at 16:47, Alex Miller <[email protected] <javascript:>> >>>> wrote: >>>> >>>> Neither is acceptable, so I either misunderstand or disagree with your >>>> question. :) >>>> >>>> The code below is an invalid type hint at that location. Are you maybe >>>> saying this should throw an error on definition? >>>> >>>> CLJ-1846 is instead a valid type hint that is in conflict with the call. >>>> Which now throws an error. >>>> >>>> >>>> On Thursday, November 12, 2015 at 10:13:13 AM UTC-6, Nicola Mometto wrote: >>>> This is :rettag in action. >>>> Any reason why this error should be acceptable while the CLJ-1846 one >>>> isn't? >>>> >>>>> On 12 Nov 2015, at 12:55, Alex Miller <[email protected] >>>>> <javascript:>> wrote: >>>>> >>>>> That's not a valid type hint. Var meta is evaluated, in this case to the >>>>> double function object. You really want: >>>>> >>>>> (defn timespi ^double [^double x] (* x 3.14)) >>>>> >>>>> >>>>> On Thursday, November 12, 2015 at 3:57:44 AM UTC-6, [email protected] >>>>> <javascript:> wrote: >>>>> Hello, >>>>> >>>>> the following stops executing on 1.8.0-rc1 or current master-head >>>>> (9448d627e091bc010e68e05a5669c134cd715a98, 1.8-RC1 plus Rich fix for >>>>> CLJ-1846): >>>>> >>>>> [/Users/reborg]$ repl >>>>> Clojure 1.8.0-master-SNAPSHOT >>>>> user=> (defn ^double timespi [^double x] (* x 3.14)) >>>>> #'user/timespi >>>>> user=> (timespi 2) >>>>> AbstractMethodError Method user$timespi.invokePrim(D)Ljava/lang/Object; >>>>> is abstract user/timespi (NO_SOURCE_FILE:-1) >>>>> >>>>> It works if you enable direct linking (or if you use 1.7.0). >>>>> >>>>> Renzo >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to [email protected] <javascript:> >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> [email protected] <javascript:> >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> <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 [email protected] <javascript:>. >>>> For more options, visit https://groups.google.com/d/optout >>>> <https://groups.google.com/d/optout>. >>> >> >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to [email protected] <javascript:> >> Note that posts from new members are moderated - please be patient with your >> first post. >> To unsubscribe from this group, send email to >> [email protected] <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> <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 [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout >> <https://groups.google.com/d/optout>. >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to [email protected] <javascript:> >> Note that posts from new members are moderated - please be patient with your >> first post. >> To unsubscribe from this group, send email to >> [email protected] <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> <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 [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout >> <https://groups.google.com/d/optout>. > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > <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 [email protected] > <mailto:[email protected]>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
