【问题标题】:Why does this clojure hello world throw a NullPointerException?为什么这个 clojure hello world 会抛出 NullPointerException?
【发布时间】:2014-04-02 20:01:56
【问题描述】:

这是我的第一个程序:

(println "hello, what is your name?")
(let [myname (read-line)]
  ((println (str "hello " myname))))

有点效果:

hello, what is your name?
Joel
hello Joel
Exception in thread "main" java.lang.NullPointerException, compiling:(/home/joel/workspace/coolstuff/clojure/hello.clj:1:38)
    at clojure.lang.Compiler.load(Compiler.java:7142)
    at clojure.lang.Compiler.loadFile(Compiler.java:7086)
    at clojure.main$load_script.invoke(main.clj:274)
    at clojure.main$script_opt.invoke(main.clj:336)
    at clojure.main$main.doInvoke(main.clj:420)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:379)
    at clojure.lang.AFn.applyToHelper(AFn.java:154)
    at clojure.lang.Var.applyTo(Var.java:700)
    at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
    at user$eval3.invoke(hello.clj:3)
    at clojure.lang.Compiler.eval(Compiler.java:6703)
    at clojure.lang.Compiler.load(Compiler.java:7130)
    ... 9 more

为什么会抛出异常?

【问题讨论】:

    标签: clojure


    【解决方案1】:
    ((println (str "hello " myname)))
    

    ...正在运行 println 返回的东西 作为函数。

    println 不返回任何内容。因此,它返回 null。因此,将其返回值作为函数运行会引发 NullPointerException。

    去掉多余的括号:

    (println (str "hello " myname))
    

    【讨论】:

    • 非常感谢,这回答了我的问题:)
    • @static_rtti 如果这回答了您的问题,请接受此答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2013-09-09
    • 2014-12-18
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多