gpt4 book ai didi

clojure - 为什么clojure输出末尾有 "nil"

转载 作者:行者123 更新时间:2023-12-02 10:14:44 24 4
gpt4 key购买 nike

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

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

另一个问题是“&argu”在这里是什么意思?可变参数或其他什么?非常感谢!

最佳答案

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

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

通常有一个空格,所以[x & argu]。这很重要 - 所以请在代码中添加空格,然后重试。这意味着该函数需要一个或多个参数。你说它是“varadic”是非常正确的。

大多数语言都有“nil”和“varadic argument”的概念。因为 Clojure 是一种函数式语言,所以围绕“仅从函数返回”的整个思考变得非常重要。优先考虑代码中不产生副作用可以使推理变得更容易。

这是你的函数,只做了一点改变:

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

这是 REPL 中的示例用法:

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

看看函数内部 argu 是如何变成列表的。

关于clojure - 为什么clojure输出末尾有 "nil",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35231147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com