我有点迷惑的clojure实例?功能.看起来很高兴采取单一的观点.所以
(instance? String)
工作正常,但总是返回false.
我在这里遗漏了什么吗?我在两天内完成了两次,两次都花了相当长的时间来调试(是的,我同意,一旦将错误视为不幸,但是两次看起来不小心).
备注补充:
截至Clojure 1.6已经修复了!
有趣…即使实例?在core.clj中定义,对于(instance?)形式,clojure.lang.Compiler中内置的特殊处理似乎也是如此.
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中定义的函数被调用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。