clojure实例?单一论证

前端之家收集整理的这篇文章主要介绍了clojure实例?单一论证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点迷惑的clojure实例?功能.看起来很高兴采取单一的观点.所以
(instance? String)

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

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

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

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

@L_502_0@

有趣…即使实例?在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中定义的函数调用.

猜你在找的设计模式相关文章