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

欢迎!请查看 关于 页面,获取更多有关此如何工作的信息。

+5
core.async

在使用信道时,例如在处理 http 响体流时,如果有一个 chan? 函数可以检查给定的 var 是否是一个信道,那就将非常有帮助。

Aleph 已经在其 http-server/client 实现中,使用 lamina 信道这样做,感觉相当一致。

当然,为基本对象提供一个类型检查函数也与 Clojure 的其他部分更协调。

6 个答案

+1
_由 thheller 发表的评论_

我想看到提到的 {{chan?}}、{{read-port?}} 和 {{write-port?}} 断言,因为这将使编写一些 clojure.spec/fdefs 更简单(并且可移植到 cljs.core.async)。
+1

由 jwr 发表的评论

我已经到了需要指定包含传递了信道的结构体的地方。我寻找了一个我可以用于我的 specs 的 chan? 断言,但未找到,最后到了这里。

回答 Rich 的引用:是的,我认为对于“流行”的界面需要断言——spec 编写者可能并不知道(或者关心)必须实现哪些接口。我不知道 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
...