鉴于这是s-exp:
(let [temp 30
temp (* temp 9/5)
temp (+ temp 32)]
temp)
忽略算术可以内联的事实,这样重新绑定temp
在Clojure中是否令人反感?为什么/为什么不呢?
答案 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))
这个特定的表达式显然可以进一步简化,但->
或->>
通常会因重复使用符号(重新绑定)而导致不可读性和嵌套导致的不可读性(如果更换则会发生这种情况)使用巨大的嵌套表达式重新绑定。)