首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure core.async,通道与端口

Clojure core.async,通道与端口
EN

Stack Overflow用户
提问于 2015-05-02 00:12:21
回答 1查看 749关注 0票数 9

在Clojure core.async中,通道和端口是相同的吗?如果不是,有什么区别?在观看视频Timothy Baldridge - Core.Async时,他创建了一个频道

代码语言:javascript
复制
(def c (chan))

然后晚些

代码语言:javascript
复制
(<!! c)

c<!!状态的通道,但是<!!状态的文档(重点是添加的)

用法:(端口获取一个val。如果关闭,将返回零。如果没有可用的话,将阻塞。

现在还不清楚如何看待core.async docs

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-02 00:57:14

是的,中国是港口。

端口位于这些实现的协议的名称中。

代码语言:javascript
复制
(defprotocol ReadPort
  (take! [port fn1-handler] "derefable val if taken, nil if take was enqueued"))

中的impl/take使用:

代码语言:javascript
复制
(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。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29996881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档