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 [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.
--
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.