为什么在 clojure 中输出末尾有一个"nil"



我想知道为什么在 clojure 的输出末尾有一个"nil"。这是我的代码:

(defn foo [x &argu]
    (print x &argu))

另一个问题是"&argu"在这里是什么意思?一个可变参数还是什么?非常感谢!

REPL(或您正在使用的任何执行环境(让您知道代码评估的输出。正如你写的一样,你的函数不会返回任何内容。在这种情况下,nil按照惯例返回。 nil是Clojure的nothing/null标记。你的代码所做的只是打印 - 这是一个"副作用"。

需要注意的是,nil是Clojure中的适当值。这与某些语言形成鲜明对比,某些语言甚至不允许您将undefined/unknown值与另一个适当的值进行比较 - 这样做会生成异常。

通常有一个空间,所以[x & argu].这很重要 - 所以请在代码中放置空格,然后重试。这意味着该函数采用一个或多个参数。你说它是"瓦拉迪的"是很正确的。

大多数语言都有"nil"和"varadic arguments"的概念。因为Clojure是一种函数式语言,所以围绕"只从函数中返回"的整个思考变得非常重要。优先考虑代码中没有副作用可以更轻松地进行推理。

这是您的函数稍有更改:

(defn foo [x & argu]
  (println x argu))

这是 REPL 中的示例用法:

=> (foo 3 "Hello" "how" "are" "you?")
3 (Hello how are you?)
nil

看看功能内部如何argu成为list

相关内容

最新更新