欢迎!请查看关于页面,了解有关如何使用本站的一些更多信息。
在使用通道时,例如用于流式传输http身体,如果有 chan? 函数来检查给定的 var 是否为通道,将会非常有帮助。
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的内部并试图确定我需要哪些接口,尤其是在像通道这样非常基本的事情上,绝对不是用户友好的方法。