The two classes have essentially the same semantics, but performance
differences, which is why Clojure sometimes uses one and sometimes the
other. If you want to enforce that a map is returned, enforce that the
return is a subtype of java.util.Map rather than checking for a specific
concrete class of map.


On Sun, Dec 22, 2013 at 3:07 PM, larry google groups <
lawrencecloj...@gmail.com> wrote:

> Hmm, I see. get-distinct was returning an empty lazyseq, which apparently
> made the difference.
>
>
> On Sunday, December 22, 2013 2:56:01 PM UTC-5, larry google groups wrote:
>>
>> Hmm, the different return types seem tied to the 2 different functions
>> being called, but both functions have the same return type, which is a
>> lazyseq. I am using Monger to get data from MongoDb. These functions are
>> private:
>>
>> (defn- get-distinct [request]
>>   {:pre [(= (type request) clojure.lang.PersistentHashMap)]
>>    :post [(= (type %) clojure.lang.LazySeq)]}
>>   (monger/get-distinct (:item-type request)))
>>
>> (defn- paginate-results [request]
>>   {:pre [ (= (type request) clojure.lang.PersistentHashMap)]
>>    :post [(= (type %) clojure.lang.LazySeq)]}
>>   (monger/paginate-results (:item-type request) (if (:which-page request)
>>                                                   (:which-page request)
>>                                                   0)))
>>
>> Both of these functions return lazyseqs, as expected. The results from
>> both get run through a (reduce) function that does some minor filtering.
>> Yet in one case the return type (from the reduce function) is 
>> clojure.lang.PersistentArrayMap
>> and in the other it is clojure.lang.PersistentHashMap. I'd like to be
>> able to write a :post condition that enforces strictness, but that seems
>> impossible because I can not figure out what the rule is that handles the
>> conversion. I don't care if the return type is 
>> clojure.lang.PersistentArrayMap
>> or clojure.lang.PersistentHashMap, all I want is it for it be
>> consistently one or the other.
>>
>>
>>
>>
>>
>> On Sunday, December 22, 2013 2:31:45 PM UTC-5, larry google groups wrote:
>>>
>>>
>>> I am surprised that a map literal is clojure.lang.PersistentArrayMap
>>> but as soon as I assign it to a var, it becomes 
>>> clojure.lang.PersistentHashMap.
>>> Are there any rules for being able to predict when these conversions occur?
>>>
>>> user> (type {})
>>> clojure.lang.PersistentArrayMap
>>>
>>> user> (type {:what "why?"})
>>> clojure.lang.PersistentArrayMap
>>>
>>> user> (def curious {:what "why?"})
>>> #'user/curious
>>>
>>> user> (type curious)
>>> clojure.lang.PersistentHashMap
>>>
>>> user> (def sug (assoc curious :whodoneit "mikey"))
>>> #'user/sug
>>>
>>> user> (type sug)
>>> clojure.lang.PersistentHashMap
>>>
>>> I am curious because I wrote a (reduce) function which mostly just
>>> builds a map:
>>>
>>>      (assoc map-of-data (:item-name next-item) next-item))
>>>
>>> Since I was using assoc I was certain I would get 
>>> clojure.lang.PersistentHashMap
>>> back, but instead I got clojure.lang.PersistentArrayMap.
>>>
>>>
>>>
>>>
>>>
>>>
>>>  --
> --
> 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