在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无法进行多过程编译)。