gpt4 book ai didi

clojure - 绕过clojure中缺少 "hoisting"

转载 作者:行者123 更新时间:2023-12-03 14:47:21 25 4
gpt4 key购买 nike

有几次我发现我有一组相互关联的函数,而我如何自然地将它们放在文件中最终会与它们的依赖项发生冲突(即函数 1 依赖于函数 2,但在函数 1 之上)。当我编写代码时,我通常会继续评估顶级表达式,并且只会评估整个文件以刷新对 refs 或诸如此类的依赖关系。我经常发现,我最终会遇到依赖冲突,最终不得不处理一堆函数。

在我知道的其他语言中,一旦你声明了一个函数,它就会在幕后“提升”,就好像它出现在其他任何东西之前一样。这样您就不必担心代码中事物的顺序,并且可以将函数视为代码的模块化位。正是缺少这个功能让我一直在 clojure 中苦苦挣扎。难道我做错了什么?与其说是一件大事,不如说是一件小事,这是你习惯于关注的事情吗?

最佳答案

declare很好地解决了这个问题

declare
macro
Usage: (declare & names)
defs the supplied var names with no bindings, useful for making forward declarations.
Added in Clojure version 1.0

您可以通过在命名空间的开头添加声明语句来避免混淆函数顺序
(declare fun1 fun2 fun3)

(defn fun3 [] (fun1))
(defn fun1 [] (fun2))
(defn fun2 [] 42)

关于clojure - 绕过clojure中缺少 "hoisting",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490324/

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