Consider the following attempt:
for some reason, after the assertion fails, the main repl thread seems to
lock up
Line 1
Line 2 // after this, no more is printed
Question: what is causing the problem -- and how do I fix it?
Thanks!
=== code ===
(ns test
(:require
#+clj [clojure.core.async.impl.protocols :as impl]
#+cljs [cljs.core.async.impl.protocols :as impl]
#+clj [clojure.core.async.impl.channels :as channels]
#+cljs [cljs.core.async.impl.channels :as channels]
#+clj [clojure.core.async :as async]
#+cljs [cljs.core.async :as async]))
(do
(deftype CheckedBuffer [buf check]
impl/Buffer
(full? [this] (impl/full? buf))
(remove! [this] (impl/remove! buf))
(add! [this itm]
(check itm)
(impl/add! buf itm)))
(defn cchan [n check]
(channels/chan (CheckedBuffer. (async/buffer n) check)))
(def oc (cchan 100 #(assert (even? %))))
(println "Line 1")
(async/alts!! [[oc 2]] :default :chan-full)
(println "Line 2")
(async/alts!! [[oc 3]] :default :chan-full)
(println "Line 3")
(async/alts!! [[oc 3]] :default :chan-full)
(println "Line 4")
)
On Tue, Jan 21, 2014 at 11:46 PM, Kelker Ryan <[email protected]>wrote:
> Can't you just test the value before placing a value in a channel?
>
> 22.01.2014, 16:27, "t x" <[email protected]>:
>
> Hi,
>
>
> ## Question:
>
> For a channel, is it possible to put a pre-condition of sorts on a
> channel?
>
> For example:
>
> (let [chan (async/chan 100)]
> (set-pre-condition! chan even?)
> (put! chan 1) ;; exception thrown
> (>!! chan 3) ;; exception thrown
> )
>
> ## Asides
>
> It's important that I want the exception to be thrown at the time of
> put, NOT at the time of take via <! or <!!.
> Thanks!
>
>
> --
> --
> 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/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 [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/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 [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/groups/opt_out.