欢迎!请查阅关于页面了解更多关于这如何工作的小信息。
当使用通道时,例如用于流http正文,有一个检查给定var是否是通道的chan?函数将会非常有帮助。
Aleph在其http-server/客户端实现中使用lamma通道这样做,感觉相当一致。
当然,这也将使整个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 的内部并尝试确定我希望实现哪些接口,特别是在像通道这样非常基本的事物上,根本不是一种用户友好的方法。