4

Clojurescriptで高階関数を作成する場合、実際には、渡された関数のパラメーターを省略することができます。

たとえば、以下は合法的なClojurescriptコードですが、違法なClojureコードです。

(def x(アトム5))

(スワップ!x(fn [] 6))

高階の「スワップ!」functionは、1つのパラメーターを受け取る関数を想定していますが、それを省略しても、プログラムは正常にコンパイル/実行されます。

Clojurescriptコードがよりクリーンになる場合、この機能を使用することは悪い形式と見なされますか?それとも、Clojurescriptの制限を乱用しているだけですか?何か意見はありますか?

あなたの考えをありがとう!

4

1 に答える 1

9

(fn [_] 6)には非常に慣用的であり、より曖昧ではないように見え(fn [] 6)ます。引数が無視されることを明示的に示しているため、さらに表現力が豊かです。

完全な (正しい) 形式を記述することのもう 1 つの利点は、コードの移植性です。


編集:ところで、あなたの例は常に使用して書き直すことができます: (swap! x (constantly 6)). constantlyは、任意の数の引数を受け入れ、 に渡された引数を常に返す関数を作成しますconstantly

于 2012-10-12T20:45:25.853 に答える