Also, ^foo-style hints are "soft hints" in the following sense:

(let [^ints xs [1 2 3]] xs) ; no complaint from compiler or RTE

In contrast, ints & Co. demand that the casts be correct:

(let [xs (ints [1 2 3])] xs) ; ClassCastException


On 20 July 2013 11:29, Michał Marczyk <michal.marc...@gmail.com> wrote:
> More complete example:
>
> (defn get-some-ints []
>   (int-array [1 2 3]))
>
> (set! *warn-on-reflection* true)
>
> ;; causes a reflection warning
> (let [xs (get-some-ints)]
>   (aget xs 0))
>
> ;; do not cause reflection warnings
> (let [xs (ints (get-some-ints))]
>   (aget xs 0))
>
> (let [xs ^ints (get-some-ints)]
>   (aget xs 0))
>
> (let [^ints xs (get-some-ints)]
>   (aget xs 0))
>
> Cheers,
> Michał
>
>
> On 20 July 2013 11:25, Michał Marczyk <michal.marc...@gmail.com> wrote:
>> I think it's more about clojure.core/{ints,longs,...}. These are
>> basically tools for removing reflection:
>>
>> (let [xs (ints (get-some-ints))]
>>    (aget xs 0)) ; no reflection here thanks to the cast
>>
>> Cheers,
>> Michał
>>
>>
>> On 20 July 2013 10:47, Mikera <mike.r.anderson...@gmail.com> wrote:
>>> Do you mean something like (int-array [1 2 3 4])?
>>>
>>> This is a cast-like operation that produces a primitive array of ints,
>>> exactly like int[] in Java. You can then use it with array operations like
>>> "aget".
>>>
>>> If you want to type-hint int-array parameters then you need to use something
>>> like "^ints", e.g.
>>>
>>> (defn third-int-in-array [^ints xs]
>>>      (aget xs 2))
>>>
>>> On Saturday, 20 July 2013 02:28:15 UTC+1, Brian Craft wrote:
>>>>
>>>> I'm unable to find any examples of primitive array casts, and the docs are
>>>> not helpful. Can someone point me to examples or docs that explain what 
>>>> they
>>>> do?
>>>
>>> --
>>> --
>>> 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