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

欢迎!请查看关于页面以了解更多关于它如何工作的信息。

+5
core.async

在处理通道时,例如在流式传输http身体时,如果有一个可以检查给定变量是否为通道的chan?函数将非常有帮助。

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

评论者:davidrupp

实现 chan 算子。

0

评论者:halgari

我赞同这个想法,但上次我问Rich时,他的回答是“你希望每个接口都有一个算子吗?”。

由于 core.async 的实现,你可能还需要两个额外的算子。一个用于 read-port? 和 write-port?。你可以使用 (satisfies? clojure.core.async.impl.protocols/ReadPort ...),但这是一个内部实现,所以我更倾向于有一个新的算子,而不是告诉人们接触 core.async 的内部结构。但是这个决定还得由 Rich 来做。

0

评论者:exi

我明白这个道理。但这样一来,我们就必须加强文档,并提供一种方法来轻松确定哪一个接口被例如 (chan) 的返回值实现。对我来说,进入 core.async 的内在结构,试图确定我想要的接口,尤其是在像通道这样非常基础的事物上,根本不是用户友好的方法。

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