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

欢迎!请参阅 关于 页面了解更多此平台的工作方式。

+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

我理解你的观点。但这样一来,我们就必须加强文档并提供一种方法,以便轻松确定 return 值实现了哪些接口,例如 (chan)。对我来说,进入 core.async 的内部并尝试确定我想要哪些接口,特别是在像通道这样的基本事物上,根本不是用户友好的方法。

0
参考资料:https://clojure.atlassian.net/browse/ASYNC-74(由 exi 报告)
...