当调用alts!!
或alts!
时,是否保证只有一个端口被取出或放入?
(let [[value channel] (alts!! [c1 c2 c3 [1 c4]])]
(cond (= channel c1)
; at this point, is it guaranteed that alts!!
; did not take from c2 and c3, and did not call (>!! c4 1)?
(do-something)))
我在文档中找不到与此相关的任何内容。我猜这是未定义的?
答案 0 :(得分:3)
根据alts!
' docstring功能" 完成最多一次的多个渠道操作。 [...] &#34 ;.
这意味着在调用函数时,将只在端口上执行一个或零(即它将停止)操作。哪个操作是非确定性的,如文档字符串中所述:" 除非:priority
选项为true,否则如果准备了多个端口操作,则将进行非确定性选择"