欢迎!请参阅 关于 页面了解更多此平台的工作方式。
在使用通道时,例如用于流式传输 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
我理解你的观点。但这样一来,我们就必须加强文档并提供一种方法,以便轻松确定 return 值实现了哪些接口,例如 (chan)。对我来说,进入 core.async 的内部并尝试确定我想要哪些接口,特别是在像通道这样的基本事物上,根本不是用户友好的方法。