Clojureでは、定義の前に関数を呼び出すと、Clojure:なぜ、関数がソースコードの定義の前に呼び出された場合に `declare`でなければならないのですか?
(foo (bar 'a))
(defn bar [] ...)
コンパイルされていません。追加する必要があります
(declare bar)
(foo (bar 'a))
より前に入力してください。なぜClojureはこのように設計されていますか?つまり、Java、Python、PHP、Scala、Haskell、その他のリスプ、特にダイナミック型言語のC/C++以外のほとんどの言語では、関数宣言は必要ありません。コールの前または後。私はそれを使用するのが不快であると感じています。
Rich Hickeyの説明でこれらの古いHN投稿を掘り出した方が優れています。私は長い間彼らを再び見つけようとしていました。 –
これは、一貫した方法で、つまり下から上にコードを強制的に読み込むことを意味します。関数を見ると、その内部のすべての宣言が名前空間内で宣言されていることがわかります。ちょっとしたことですが、コードを読むときには便利です。 – shmish111