欢迎!请查看关于页面以了解更多关于它如何工作的信息。
在处理通道时,例如在流式传输http身体时,如果有一个可以检查给定变量是否为通道的chan?函数将非常有帮助。
Aleph在它的http-server/client实现中已经使用lamina通道这样做,感觉相当一致。
当然,这也将与Clojure的其他部分更一致,为基本对象提供类型检查函数。
评论由:jwr做出
我刚达到需要规范包含通道的结构(通道被传递)的阶段。我寻找了一个可用于规范的可使用的 chan? 谓词,但没有找到,最后来到了这里。
回答Rich的引言:是的,我认为对“流行”接口的谓词是必需的——规范编写者可能不知道(或关心)哪些接口必须实现。我不知道ReadPort是什么,但我正在编写core.async代码,我需要规范某物是“一个通道”。
评论者:davidrupp
实现 chan 算子。
评论者:halgari
我赞同这个想法,但上次我问Rich时,他的回答是“你希望每个接口都有一个算子吗?”。
由于 core.async 的实现,你可能还需要两个额外的算子。一个用于 read-port? 和 write-port?。你可以使用 (satisfies? clojure.core.async.impl.protocols/ReadPort ...),但这是一个内部实现,所以我更倾向于有一个新的算子,而不是告诉人们接触 core.async 的内部结构。但是这个决定还得由 Rich 来做。
评论者:exi
我明白这个道理。但这样一来,我们就必须加强文档,并提供一种方法来轻松确定哪一个接口被例如 (chan) 的返回值实现。对我来说,进入 core.async 的内在结构,试图确定我想要的接口,尤其是在像通道这样非常基础的事物上,根本不是用户友好的方法。