2024 Clojure现状调查中分享您的想法!

欢迎!请参阅关于页面以获取更多关于如何使用本网站的信息。

+5
core.async

在使用频道时,例如在处理HTTP请求体时,如果有一个函数可以检查给定的var是否是频道,那就非常有帮助。

Aleph在它的http-server/client实现中已经这样做了,使用lamina频道,并且感觉相当一致。

当然,这也将使得clojure中的基本对象类型检查函数更为一致。

6 答案

+1
评论由:thheller_ 提供

我希望看到之前提到的{{chan?}} {{read-port?}} {{write-port?}}谓词,因为这将使编写某些clojure.spec/fdefs更加简单(并且易于移植到cljs.core.async)。
+1

评论由:jwr 提供

我刚达到需要指定包含可传递频道的数据结构的地步。我寻找了一个可以用于我的指定方案的chan?谓词,但没有找到,于是来到了这里。

回应Rich的引用:是的,我认为对于“普及”的接口谓词是需要的——指定编写者可能并不一定知道(或不关心)哪些接口必须实现。我不知道ReadPort是什么,但我正在编写core.async代码,并需要指定某物是“一个频道”。

0
by

评论者:davidrupp

实现 chan? 断言。

0
by

评论者:halgari

我同意这一点,但上次我询问Rich时,他的报价是“你想要每个接口的断言吗?”。

由于 core.async 的实现,你可能需要两个额外的断言。一个用于 read-port? 和 write-port?。你可以使用 (satisfies? clojure.core.async.impl.protocols/ReadPort ...) 但这是一个内部实现,所以我想有一个新的断言,而不是让人们去触碰 core.async 的内部。但这个调用取决于Rich。

0
by

评论者:exi

我理解这个观点。但是,我们可能需要在文档中加强说明,并提供一个易于确定例如 (chan) 的返回值实现了哪些接口的方法。对我来说,进入 core.async 的内部并尝试确定我想要的接口,特别是对于像频道这样非常基本的东西,根本不是用户友好的方法。

0
by
参考:[链接](https://clojure.atlassian.net/browse/ASYNC-74)(由 exi 提出)
...