The important part were that the "dosync" call is isolated. The condition
doesn't really matter.

By the way: wouldn't it be simpler to create a new map instead of altering
unique-offers/all-offers?
(this is also more idiomatic)

On Tue, Apr 26, 2011 at 10:02 PM, Zlatko Josic <zlatko.jo...@gmail.com>wrote:

> I have given only part of function. I have condition like this :
>
> (cond
>   (and (empty? @unique-offers) (empty? @all-offers))
>
> I change in dosync both unique-offers and all-offers. If I use your
> suggestion
>   (empty? @unique-offers) (dosync ... alter ...)
>
> Can I get in situation where unique-offers is old value but all-offers is
> new value?
>
> Thanks
>
>
>
> On Tue, Apr 26, 2011 at 9:55 PM, Jonathan Fischer Friberg <
> odysso...@gmail.com> wrote:
>
>> I don't know.
>> However, given the situation I think
>>
>> (cond
>>   (empty? @unique-offers) (dosync ... alter ...)
>>   :else (logger/log "error"))
>>
>> is better, since the change is more isolated.
>>
>> On Tue, Apr 26, 2011 at 9:45 PM, Zlatko Josic <zlatko.jo...@gmail.com>wrote:
>>
>>> Hi,
>>>
>>> I use cond in dosync but it doesn't work. Here is a function code:
>>>
>>>
>>> (defn process-request
>>>   [offer args]
>>>   (logger/log "process called")
>>>   (let [offer-value (Double/parseDouble (:offer offer))
>>>           out-queue (:out-queue args)
>>>           unique-offers (:unique-offers args)
>>>           all-offers (:all-offers args)
>>>            streams (:streams offer)]
>>>       (dosync
>>>         (cond
>>>           (empty? @unique-offers)
>>>           ((logger/log "map" @unique-offers)
>>>             (alter unique-offers assoc offer-value streams))
>>>           :else (logger/log  "error")))))
>>>
>>> unique-offer is ref for map which is empty so condition (empty?
>>> @unique-offers) is true.
>>> Statement (alter unique-offers assoc offer-value streams) never changes
>>> unique-offers map.
>>> If I remove cond from function it works fine (The function has only dosyn
>>> and alter).
>>>
>>> What am I doing wrong?
>>>
>>> Thanks
>>>
>>> --
>>> 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 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 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 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

Reply via email to