在 Clojure 中,如何检查一个对象是否是 core.async 通道?
In Clojure, how to check if an object is a core.async channel?
有一个函数chan
可以创建频道。但是我没有看到 chan?
。
对于 chan
创建的对象,我将如何编写一个谓词 chan?
returns 为真?
我问的是 Clojure 和 ClojureScript。
因为频道是 implemented as:
(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)
有一个函数chan
可以创建频道。但是我没有看到 chan?
。
对于 chan
创建的对象,我将如何编写一个谓词 chan?
returns 为真?
我问的是 Clojure 和 ClojureScript。
因为频道是 implemented as:
(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)