[英]print and return another value in Clojure
I have a Clojure beginner question about why the following code doesn't work : 我有一个Clojure初学者问题,为什么下面的代码不起作用:
(defn aFun [n]
(if (< -10 n 10)
((println "Single digit" n) "A return value")
((println "More digits" n) "Another return value")))
I get a NullPointerException
at runtime. 我在运行时收到
NullPointerException
。 Why ? 为什么呢
This function works : 此功能有效:
(defn aFun [n]
(if (< -10 n 10)
"A return value"
"Another return value"))
And this one too : 这也是:
(defn aFun [n]
(if (< -10 n 10)
(println "Single digit" n)
(println "More digits" n)))
I'd like to do both at the same time however : (compute and) return a value, while printing some things first. 我想同时做两个:(计算和)返回值,同时先打印一些东西。 I'm sure this is pretty basic (not even sure how to title my question), but I can't get what I am doing wrong.
我确信这是非常基本的(甚至不确定如何给我的问题加上标题),但是我无法理解我做错了什么。
((println "Single digit" n) "A return value")
... attempts to apply (println "Single digit" n)
, which returns nil
, as a function, to "A return value"
. ...尝试将返回
nil
作为函数的(println "Single digit" n)
应用于"A return value"
。
You probably intend 你可能打算
(do (println "Single digit" n) "A return value")
Try, where you can, to separate side-effects from pure functional computation. 尽可能尝试将副作用与纯函数计算分开。 Here, for example,
例如,在这里
(defn single-digit? [n]
(< -10 n +10))
... is pure. ...是纯净的。 You can wrap it in stuff that prints what you like.
您可以将其包装在可以打印您喜欢的内容的东西中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.