欢迎!请查阅关于页面了解更多信息。
在使用通道时,例如用于流式传输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 的内部,并试图确定我想要的接口,尤其是在像通道这样非常基本的东西上,根本不是一个用户友好的方法。