在Clojure中使用相同的命名空间之前,是否需要声明函数?

时间:2015-02-01 19:49:22

标签: clojure functional-programming

我有这段代码:

(ns mylib-clojure.core)

(defn doWhatever2 [x]
  (doWhatever1 x))

(defn doWhatever1 [x]
  (inc x))

除非我将doWhatever1函数定义移到doWhatever2之上,否则此代码不起作用。由于我处于相同的命名空间,所以我必须这样做很奇怪。有没有办法在命名空间中声明我的函数而不必考虑订单?

1 个答案:

答案 0 :(得分:10)

Clojure编译器执行单次传递,因此顺序很重要。

Clojure提供了一种指定前向声明的方法:

(declare doWhatever1)

请参阅clojure.core/declare