2011-03-30 76 views
15

我发现有几次我有一组相互关联的函数,以及我如何自然地将它们放在文件中,最终与它们的依赖冲突(即函数1依赖于在功能2上,但在功能1上)。当我编写代码时,我通常会继续评估顶级表达式,并且只会评估整个文件以刷新refs或whatnot的依赖关系。我经常发现,我最终会遇到依赖冲突,最终不得不围绕一堆功能。解决clojure中“吊起”的问题

在我知道的其他语言中,只要你声明了一个函数,它就会在幕后“悬挂”,就好像它出现在别的之前一样。这样你就不需要担心代码中事物的顺序,并且可以把函数当作模块化代码。这是缺乏这种功能,使我一直陷入困境。难道我做错了什么?它更多的是一个小小的烦恼,然后是一笔巨额的交易,这是你刚刚习惯于注意的事情吗?

回答

22

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) 
+0

甜,感谢的开始杂耍的函数命令!正是我所寻找的 – 2011-03-30 18:58:26

+0

仍然有点毛病,但谢谢! – 2018-01-29 19:25:08