次の s-exp が与えられます。
(let [temp 30
temp (* temp 9/5)
temp (+ temp 32)]
temp)
算術演算をインライン化できるという事実を無視すると、temp
このような再バインドは Clojure で好ましくないのでしょうか? なぜ/なぜしないのですか?
次の s-exp が与えられます。
(let [temp 30
temp (* temp 9/5)
temp (+ temp 32)]
temp)
算術演算をインライン化できるという事実を無視すると、temp
このような再バインドは Clojure で好ましくないのでしょうか? なぜ/なぜしないのですか?
これは、例の条件付きスレッド マクロの定義で core.clj で使用されます。値の構成をセグメントに分割することで、人間が使用できることが明確になる場合、これはこのパターンの優れた使用法であると自信を持って言えます。
多くの Clojurians が「再結合」という言葉をbind
関数の使用を意味すると解釈することは注目に値します。別の意味もありますが、正確に使用しています。
これはあまり機能的ではありませんlet
。すべての変数では、何かを意味する必要があります。私はこれにリファクタリングします:
(let [celsius 30
fahrenheit-unnormalized (* celsius 9/5)
fahrenheit (+ fahrenheit 32)
fahrenheit)
(私はより良い解決策を無視しています:)
(+ (* temp 9/5) 32)
内部での再バインドlet
は、多くの場合、スレッド化マクロの 1 つを使用して表現できます。次の式は、質問の式と同等です。
(-> 30 (* 9/5) (+ 32))
この特定の式は明らかにさらに単純化できますが、多くの->
場合->>
、シンボルの再利用 (再バインド) による読みやすさと、ネスト (再バインドを巨大なネストされた式に置き換えた場合に発生) による読みづらさの間の適切な場所に到達します。