clojure实例?单一论证

我有点迷惑的clojure实例?功能.看起来很高兴采取单一的观点.所以
(instance? String)

工作正常,但总是返回false.

我在这里遗漏了什么吗?我在两天内完成了两次,两次都花了相当长的时间来调试(是的,我同意,一旦将错误视为不幸,但是两次看起来不小心).

为什么不破坏,有一个无礼的错误?

备注补充:
截至Clojure 1.6已经修复了!

http://dev.clojure.org/jira/browse/CLJ-1171

有趣…即使实例?在core.clj中定义,对于(instance?)形式,clojure.lang.Compiler中内置的特殊处理似乎也是如此.

Compiler.java,line 3498

if(fexpr instanceof VarExpr && ((VarExpr)fexpr).var.equals(INSTANCE))
        {
        if(RT.second(form) instanceof Symbol)
            {
            Class c = HostExpr.maybeClass(RT.second(form),false);
            if(c != null)
                return new InstanceOfExpr(c,analyze(context,RT.third(form)));
            }
        }

我解释说,当你编译/评估一个(实例?)形式时,core.clj中定义的函数被忽略,有利于硬连线的行为,这将把缺少的第二个参数解释为nil.我猜这是为了表现的原因,作为一种衬里.

显然,这种特殊处理仅适用于某些情况(我不熟悉编译器知道它们是什么).如Ankur的答案所示,有没有办法调用实例?这将导致在core.clj中定义的函数被调用.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...