在Clojure中的同一命名空间中使用函数之前,是否需要声明函数?
我有以下代码片段:在Clojure中的同一命名空间中使用函数之前,是否需要声明函数?,clojure,functional-programming,Clojure,Functional Programming,我有以下代码片段: (ns mylib-clojure.core) (defn doWhatever2 [x] (doWhatever1 x)) (defn doWhatever1 [x] (inc x)) 除非我将doWhatever1函数定义移到上面的doWhatever2,否则此代码不起作用。因为我在同一个名称空间中,所以我不得不这样做似乎很奇怪。有没有一种方法可以在名称空间中声明我的函数而不必考虑顺序?Clojure编译器只进行一次传递,因此顺序很重要 Clojure确实提
(ns mylib-clojure.core)
(defn doWhatever2 [x]
(doWhatever1 x))
(defn doWhatever1 [x]
(inc x))
除非我将
doWhatever1
函数定义移到上面的doWhatever2
,否则此代码不起作用。因为我在同一个名称空间中,所以我不得不这样做似乎很奇怪。有没有一种方法可以在名称空间中声明我的函数而不必考虑顺序?Clojure编译器只进行一次传递,因此顺序很重要
Clojure确实提供了一种指定转发声明的方法:
(declare doWhatever1)
请参见如果Clojure没有这样做,则不能将文件中的任何名称空间复制并粘贴到REPL中,并期望它能够工作(因为REPL无法进行多过程编译)。