我有一个Clojure初学者问题,为什么下面的代码不起作用:
(defn aFun [n]
(if (< -10 n 10)
((println "Single digit" n) "A return value")
((println "More digits" n) "Another return value")))
我在运行时得到NullPointerException
。为什么?
此功能有效:
(defn aFun [n]
(if (< -10 n 10)
"A return value"
"Another return value"))
还有这个:
(defn aFun [n]
(if (< -10 n 10)
(println "Single digit" n)
(println "More digits" n)))
我想同时做两件事:(计算和)返回一个值,同时首先打印一些东西。我确定这是非常基本的(甚至不确定如何标题我的问题),但我无法得到我做错的事。
答案 0 :(得分:6)
((println "Single digit" n) "A return value")
...尝试将(println "Single digit" n)
作为函数返回nil
,"A return value"
。
你可能打算
(do (println "Single digit" n) "A return value")
尽可能尝试将副作用与纯函数计算分开。例如,
(defn single-digit? [n]
(< -10 n +10))
......很纯粹。你可以把它包装成打印你喜欢的东西。