为什么这个clojure hello world会抛出NullPointerException?

sta*_*tti 2 clojure

这是我的第一个项目:

(println "hello, what is your name?")
(let [myname (read-line)]
  ((println (str "hello " myname))))
Run Code Online (Sandbox Code Playgroud)

它有点工作:

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
Run Code Online (Sandbox Code Playgroud)

为什么会抛出异常?

Cha*_*ffy 16

((println (str "hello " myname)))
Run Code Online (Sandbox Code Playgroud)

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

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

取出额外的括号:

(println (str "hello " myname))
Run Code Online (Sandbox Code Playgroud)

  • @static_rtti如果这回答了你的问题,请接受这个答案.谢谢. (2认同)