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
...