18

相互に関連する関数のグループがあり、それらをファイルに自然に配置する方法が依存関係と競合することを何度か発見しました (つまり、関数 1 は関数 2 に依存しますが、関数 1 の上にあります)。私がコードを書いているとき、私は通常トップレベルの式を評価し続け、ファイル全体を評価して参照などへの依存関係を更新するだけです。非常に頻繁に、依存関係の競合が発生し、多くの関数を調整する必要があることがわかりました。

私が知っている他の言語では、関数を宣言するとすぐに、それが他の何よりも前に現れたかのように、舞台裏で「巻き上げ」られます。そうすれば、コード内の順序を気にする必要がなくなり、関数をコードのモジュラー ビットとして扱うことができます。clojure で私を悩ませ続けているのは、この機能の欠如です。私は何か間違ったことをしていますか?それは大したことではなく、小さな煩わしさですが、これはあなたが注意を払うことに慣れているものですか?

4

1 に答える 1

25

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ステートメントを追加することで、関数の順序を混乱させることを回避できます。

(declare fun1 fun2 fun3)

(defn fun3 [] (fun1))
(defn fun1 [] (fun2))
(defn fun2 [] 42)
于 2011-03-30T18:25:49.827 に答える