我发现有几次我有一组相互关联的函数,我怎么自然地将它们放在文件中最终与它们的依赖项冲突(即函数1依赖于函数2,但是在函数1之上).当我编写代码时,我通常会继续评估顶级表达式,并且只会评估整个文件以刷新refs或诸如此类的依赖关系.我经常发现,我最终会遇到依赖冲突,并最终不得不兼顾一堆函数.
在其他语言中,我知道,只要你声明一个函数,它就会在幕后"悬挂",好像它出现在其他任何东西之前.这样您就不必担心代码中的事物顺序,并且可以将函数视为代码的模块化位.缺乏这个功能让我一直在咬我.难道我做错了什么?它是一个小麻烦然后是一个巨大的交易,这是你只是习惯于注意的东西?
Art*_*ldt 23
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
Run Code Online (Sandbox Code Playgroud)
您可以通过在命名空间的开头添加声明语句来避免处理函数顺序
(declare fun1 fun2 fun3)
(defn fun3 [] (fun1))
(defn fun1 [] (fun2))
(defn fun2 [] 42)
Run Code Online (Sandbox Code Playgroud)