>
> So, if a list whose first element is a vector is provided after a get or a 
> put in alt!, then that's treated as the binding form/code to be executed if 
> that succeeds, but if a non-list is provided, then that is treated as a 
> value to return if that action was taken (and that value is evaluated 
> before any operation happens)?
>
>
I'm not sure about the evaluation order, but I bet you can come up with an 
experiment to test it :)

Eric

 

> On Friday, August 15, 2014 8:35:05 AM UTC-4, Daniel Solano Gómez wrote:
>>
>> On Thu Aug 14 19:04 2014, dgrnbrg wrote: 
>> > You're all right--that was a cut & paste error. I meant that I see this 
>> > behavior with alt!!, not alts! 
>>
>> With alt!!, it should probably be something like: 
>>
>> (let [result (alt!! [[inner-chan e]] ([v] (if v 
>>                                             :put-a-value 
>>                                             :channel-closed)) 
>>                     :default :failed-to-put 
>>                     :priority true)] 
>>   (println result)) 
>>
>> I hope this helps. 
>>
>> Sincerely, 
>>
>> Daniel 
>>
>> > 
>> > On Thursday, August 14, 2014 3:31:45 PM UTC-4, Ghadi Shayban wrote: 
>> > > 
>> > > What Daniel said.  The call is incorrect, its args are alt-shaped, 
>> but it 
>> > > calls alt*s*. 
>> > > 
>> > > alt is the macro that is shaped like cond. 
>> > > alts is the function that takes a vector 
>> > > 
>> > > Both take splatted options at the end. 
>> > > 
>> > > Can never use single bang* except within go.* 
>> > > 
>> > > go => ! 
>> > > thread => !! 
>> > > 
>> > > Unfortunately if the two are confused, the exception will happen... 
>> > > probably elsewhere. 
>> > > 
>> > > On Thursday, August 14, 2014 2:46:22 PM UTC-4, Eric Normand wrote: 
>> > >> 
>> > >> Hi there, 
>> > >> 
>> > >> The :default option is for a *value* that should be returned if none 
>> of 
>> > >> the channels are available. The expression is evaluated *before* the 
>> > >> async/alts! call happens (just like normal parameters). 
>> > >> 
>> > >> I think you are misunderstanding alts!. It should be used like this 
>> > >> 
>> > >> (let [[val ch] (async/alts! [[inner-chan e]] :default :default)] 
>> > >>   (if (= :default val) 
>> > >>     (println "inner-chan was not ready") 
>> > >>     (if val 
>> > >>       (println "did the put to inner-chan") 
>> > >>       (println "inner-chan is closed")))) 
>> > >> 
>> > >> I hope that helps. Let me know if you have any more questions. 
>> > >> 
>> > >> Eric 
>> > >> 
>> > >> On Thursday, August 14, 2014 11:03:01 AM UTC-5, dgrnbrg wrote: 
>> > >>> 
>> > >>> When I use alts!, it seems that both the put and :default action 
>> run 
>> > >>> every time. I've included the code sample below: 
>> > >>> 
>> > >>> (let [inner-chan (async/chan (async/buffer 1000)) 
>> > >>>       mult (async/mult inner-chan) 
>> > >>>   (async/thread 
>> > >>>     (while true 
>> > >>>       (let [e (.take linked-blocking-queue)] 
>> > >>>         (async/alts! 
>> > >>>           [[inner-chan e]] (println "did the put") 
>> > >>>           :default (println "failed to put") 
>> > >>>           :priority true))))) 
>> > >>> 
>> > >>> 
>> > >>> Elsewhere in the code, I tap the mult before I start putting 
>> elements 
>> > >>> onto the linked-blocking-queue. For every element I put onto the 
>> LBQ, I see 
>> > >>> both messages: "did the put" and "failed to put". What is going on 
>> here? 
>> > >>> 
>> > >> 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> > Groups "Clojure" group. 
>> > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. 
>> > For more options, visit 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 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/d/optout.

Reply via email to