clojure实例?单一论证
发布时间:2020-12-14 00:48:29 所属栏目:百科 来源:网络整理
导读:我有点迷惑的clojure实例?功能.看起来很高兴采取单一的观点.所以 (instance? String) 工作正常,但总是返回false. 我在这里遗漏了什么吗?我在两天内完成了两次,两次都花了相当长的时间来调试(是的,我同意,一旦将错误视为不幸,但是两次看起来不小心). 为什么
我有点迷惑的clojure实例?功能.看起来很高兴采取单一的观点.所以
(instance? String) 工作正常,但总是返回false. 我在这里遗漏了什么吗?我在两天内完成了两次,两次都花了相当长的时间来调试(是的,我同意,一旦将错误视为不幸,但是两次看起来不小心). 为什么不破坏,有一个无礼的错误? 备注补充: 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中定义的函数被调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |