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

我刚刚达到了需要指定包含在结构中的通道的点。我寻找了一个可以用作我的规格的 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
...