我想知道为什么在clojure输出结束时会出现“nil”。这里是我的代码:为什么clojure在输出结束时会出现“nil”
(defn foo [x &argu]
(print x &argu))
而另一个问题是,什么是“&申辩”这里的意思?一个可变参数或什么?非常感谢!
我想知道为什么在clojure输出结束时会出现“nil”。这里是我的代码:为什么clojure在输出结束时会出现“nil”
(defn foo [x &argu]
(print x &argu))
而另一个问题是,什么是“&申辩”这里的意思?一个可变参数或什么?非常感谢!
REPL(或您正在使用的任何执行环境)可让您知道代码评估的输出。正如你写的那样,你的函数不会返回任何东西。在这种情况下,按照惯例返回nil
。 nil
是Clojure的标记nothing/null
。你所有的代码都在印刷 - 这是一种“副作用”。
重要的是要注意,nil
在Clojure中是一个合适的值。这与一些甚至不允许您将undefined/unknown
值与另一个值相比的语言进行比较 - 这样做会产生异常。
通常有一个空间,所以[x & argu]
。它很重要 - 所以请在代码中放置空格,然后重试。这意味着该函数需要一个或多个参数。你说这是'可变的',是非常正确的。
大多数语言都有'无'和'可变参数'的概念。由于Clojure是一种功能性语言,因此从功能中“回归”的整个思想变得非常重要。在代码中优先考虑没有副作用可以使得推理更容易。
这是你的函数改变一点点:
(defn foo [x & argu]
(println x argu))
而且这是在REPL用法示例:
=> (foo 3 "Hello" "how" "are" "you?")
3 (Hello how are you?)
nil
如何看功能argu
里面已经成为一个list
。
*你的函数不返回任何东西*更好地说,一个空的函数体评估为['nil'](https://clojure.org/reference/data_structures#nil),这是Clojure中的一个合适的值,通常返回在没有任何其他价值的情况下。如果它的意思是* undefined *,那么测试它的平等性将会是可疑的。 – Thumbnail
当我运行(foo 3“hello”)时,它出来3hellonil –
'print'在最后没有'换行',这就是为什么输出只是在之前输出的东西之后进行的原因。只有在特殊情况下才需要“打印”。使用'println'的做法更为常见,它有一些不错的格式。 –