欢迎!请参阅关于页面以获取更多关于如何使用本网站的信息。
在使用频道时,例如在处理HTTP请求体时,如果有一个函数可以检查给定的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 的内部并尝试确定我想要的接口,特别是对于像频道这样非常基本的东西,根本不是用户友好的方法。