如何检查变量是否在clojure中实现接口?

如何检查变量是否在clojure中实现接口?,clojure,Clojure,所以我定义了一个关键词: (def a :hello) 如何检查它是否实现了IFn接口?对于一般情况,可以使用谓词: (instance? <class-or-interface> <object>) 对于问题中的代码,请执行以下操作: (instance? package.of.IFn a) 或者,正如评论中所指出的,对于询问a是否为IFn实例的非常具体的情况,这将起作用: (ifn? a) 更妙的是,使用(ifn?a)@DaveRay如何?我不知道接口会自动附

所以我定义了一个关键词:

(def a :hello)

如何检查它是否实现了IFn接口?

对于一般情况,可以使用谓词:

(instance? <class-or-interface> <object>)
对于问题中的代码,请执行以下操作:

(instance? package.of.IFn a)
或者,正如评论中所指出的,对于询问
a
是否为
IFn
实例的非常具体的情况,这将起作用:

(ifn? a)

更妙的是,使用
(ifn?a)
@DaveRay如何?我不知道接口会自动附带测试谓词,文档中对此有何解释?它是否适用于Java接口,如
Serializable
?不,没有针对每种类型的通用谓词,但问题是如何测试
IFn
,在这种情况下,
IFn?
我想会比使用
实例更惯用吗?
。类似地,我会使用
string?
而不是您的第一个示例。您为什么要这样做?这可能表明设计有问题。
(ifn? a)