有一个函数chan
用于创建通道,但我没有看到chan?
。
如何编写一个谓词chan?
,以便它返回由 chan
创建的对象为真?
我的问题适用于Clojure和ClojureScript。
有一个函数chan
用于创建通道,但我没有看到chan?
。
如何编写一个谓词chan?
,以便它返回由 chan
创建的对象为真?
我的问题适用于Clojure和ClojureScript。
因为通道是实现为:
(deftype ManyToManyChannel [^LinkedList takes ^LinkedList puts ^Queue buf closed ^Lock mutex add!]
...)
ManyToManyChannel
的实例:(import [clojure.core.async.impl.channels ManyToManyChannel])
(instance? ManyToManyChannel obj)
或者,如果你更关心协议而不是类型本身,你可以检查对象是否符合其中一个协议:satisfies?
(satisfies? clojure.core.async.impl.protocols/WritePort
obj)
import
在clj和cljs之间似乎有不同的工作方式。我知道这适用于前者;不确定后者是否适用。 - Carcigenicateinstance? ManyToManyChannel
解决方案,因为它比satisfies? ...
解决方案快大约10,000倍,我的机器上大约是4纳秒对比40微秒。在我疯狂寻找为什么我的程序运行速度减半时(在一个重要的内部函数中使用了这个函数大约4次),我发现了这一点。避免我的命运;-) - Ryan Tate