在Clojure core.async中,通道和端口是相同的吗?如果不是,有什么区别?在观看视频Timothy Baldridge - Core.Async时,他创建了一个频道
(def c (chan))然后晚些
(<!! c)c是<!!状态的通道,但是<!!状态的文档(重点是添加的)
用法:(端口获取一个val。如果关闭,将返回零。如果没有可用的话,将阻塞。
现在还不清楚如何看待core.async docs。
发布于 2015-05-02 00:57:14
是的,中国是港口。
端口位于这些实现的协议的名称中。
(defprotocol ReadPort
(take! [port fn1-handler] "derefable val if taken, nil if take was enqueued"))中的impl/take使用:
(defn <!!
"takes a val from port. Will return nil if closed. Will block if nothing is available."
[port]
(let [p (promise)
ret (impl/take! port (fn-handler (fn [v] (deliver p v))))]
(if ret
@ret
(deref p))))在整个async.clj中,名称端口的使用非常一致。从概念上讲,这是有用的,因为并不是所有core.async工作的东西都是一个通道。其他东西可以实现ReadPort和WritePort,因此可以很好地处理core.async。
https://stackoverflow.com/questions/29996881
复制相似问题