首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主要关闭NPE

主要关闭NPE
EN

Stack Overflow用户
提问于 2014-06-11 21:36:19
回答 1查看 247关注 0票数 3

在我的世界里,我得到了一个奇怪的NPE

代码语言:javascript
复制
(ns test-app.core
    (:gen-class))

(defn -main [& args]
    ( (println "Hello")) )

注意(println "Hello")周围的额外()。这似乎就是问题所在,如果我把它去掉,那就好了。

以及程序的输出。注意,代码实际上打印了"Hello“并抛出了。

代码语言:javascript
复制
Hello
Exception in thread "main" java.lang.NullPointerException
    at test_app.core$_main.doInvoke(core.clj:5)
    at clojure.lang.RestFn.invoke(RestFn.java:397)
    at clojure.lang.Var.invoke(Var.java:411)
    at user$eval5$fn__7.invoke(form-init9064825970813284041.clj:1)
    at user$eval5.invoke(form-init9064825970813284041.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6619)
    at clojure.lang.Compiler.eval(Compiler.java:6609)
    at clojure.lang.Compiler.load(Compiler.java:7064)
    at clojure.lang.Compiler.loadFile(Compiler.java:7020)
    at clojure.main$load_script.invoke(main.clj:294)
    at clojure.main$init_opt.invoke(main.clj:299)
    at clojure.main$initialize.invoke(main.clj:327)
    at clojure.main$null_opt.invoke(main.clj:362)
    at clojure.main$main.doInvoke(main.clj:440)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:419)
    at clojure.lang.AFn.applyToHelper(AFn.java:163)
    at clojure.lang.Var.applyTo(Var.java:532)
    at clojure.main.main(main.java:37)
[Finished in 4.0s with exit code 1]

我的问题是为什么会发生这种事?

或者更好的是:这是一个bug,还是预期的行为?

我认为这是因为列表的第一个arg应该是函数的名称,这里是另一个列表:P,但是在这种情况下,编译器/运行时不应该给出一个更好的错误吗?

提前结束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 21:41:28

我认为这是因为列表的第一个arg应该是函数的名称,这里是另一个列表

在计算代码时,对列表表单中的第一个项进行计算,并将结果作为函数调用(第一个项可以是函数的名称,也可以是返回函数的另一个函数调用)。在这种情况下,println函数总是返回nil;尝试将nil作为函数调用将产生您看到的NPE。

在这种情况下,编译器/运行时不应该给出一个更好的错误吗?

不一定-编译器不能提前知道计算内部函数调用的结果是否是用于外部函数调用的有效函数。以下功能很好:

代码语言:javascript
复制
((partial + 1) 2)

因为partial返回另一个函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24172983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档