gpt4 book ai didi

Clojure 实例?单一参数

转载 作者:行者123 更新时间:2023-12-02 09:24:27 25 4
gpt4 key购买 nike

我对 clojure instance? 函数有点困惑。似乎很乐意接受一个论点。所以

(instance? String) 

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

我在这里遗漏了什么吗?这两天我已经做了两次了,两次都花了我相当长的时间来调试(是的,我同意,犯一次错误可能会被视为不幸,但犯两次就显得粗心了)。

为什么它没有因数量错误而中断?

稍后添加注释:从 Clojure 1.6 开始,此问题已得到修复!

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

最佳答案

有趣...尽管 instance? 是在 core.clj 中定义的,但 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)));
}
}

我将其解释为,当您编译/评估 (instance?) 表单时,core.clj 中定义的函数将被忽略,以支持硬函数。 -wired 行为,它将缺少的第二个参数解释为 nil。我猜这是出于性能原因,作为一种内联。

显然这种特殊处理仅适用于某些情况(而且我对编译器不够熟悉,不知道它们是什么)。正如 Ankur 的回答所示,有多种调用 instance? 的方法会导致调用 core.clj 中定义的函数。

关于Clojure 实例?单一参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13176400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com