重新绑定是否令人反感?

时间:2013-05-24 19:27:34

标签: clojure

鉴于这是s-exp:

(let [temp 30
      temp (* temp 9/5)
      temp (+ temp 32)]
  temp)

忽略算术可以内联的事实,这样重新绑定temp在Clojure中是否令人反感?为什么/为什么不呢?

3 个答案:

答案 0 :(得分:8)

这在core.clj中用于示例的条件线程宏的定义中。如果将一个值的构造分成多个段使得人类消费清楚,那么我可以自信地说这是对这种模式的一种很好的用法。

值得注意的是,许多Clojurians会将“重新绑定”这个词解释为使用bind函数。您正在准确地使用它,尽管它也有其他含义。

答案 1 :(得分:3)

这不是很有用 - 在let每个变量都应该有意义。我会重构它:

(let [celsius 30
      fahrenheit-unnormalized (* celsius 9/5)
      fahrenheit (+ fahrenheit 32)
  fahrenheit)

(我忽略了更好的解决方案:)

(+ (* temp 9/5) 32)

答案 2 :(得分:2)

let内的重新绑定通常可以用其中一个线程宏表示。以下表达式等同于问题中的表达式:

 (-> 30 (* 9/5) (+ 32))

这个特定的表达式显然可以进一步简化,但->->>通常会因重复使用符号(重新绑定)而导致不可读性和嵌套导致的不可读性(如果更换则会发生这种情况)使用巨大的嵌套表达式重新绑定。)