【发布时间】:2016-01-18 13:44:14
【问题描述】:
我已阅读以下文档和示例,但仍然不明白它的真正含义。我了解 alts !!,但不是 alt !!。有人举一个容易理解的例子吗?
https://clojure.github.io/core.async/#clojure.core.async/alt!!
我也准备好了以下链接
In Clojure (core.async) what's the difference between alts and alt?
更新:文档中的示例是:
(alt!
[c t] ([val ch] (foo ch val))
x ([v] v)
[[out val]] :wrote
:default 42)
为第二行
[c t] ([val ch] (foo ch val))
[c t] 的channel-op 表示一个通道c 和一个值t:将值t 放在通道c 上。 ([val ch] (foo ch val)) 的 result-expr 表示为操作出价 [val ch],但由于它是一个列表,因此 [val ch] 应该作为一个函数计算,并且 (foo ch val) 将是作为传递给[val ch]函数的参数。但是对于参数为 (foo ch val) 的 [val ch] 函数意味着什么?
【问题讨论】:
-
哪部分不明白?
-
我认为您对第二行的解释有些偏离。
[c t]是一个端口向量。[val ch]是一个绑定(如你所说)。ch是可以从中获取的频道;val是取值。然后使用该绑定评估函数foo。请参阅gist.github.com/konacaret/d1f5c19cfbe46d3b97a3 了解一个简单的示例。 -
这个例子非常多,非常清楚。最好把它放在官方文档上:)
标签: clojure core.async