给定的是这个 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 中条件线程宏定义的示例。如果将值的构造拆分为多个部分可以清楚地供人类消费,那么我会自信地说这是对这种模式的一种很好的使用。
值得注意的是,许多 Clojurian 会将“重新绑定”这个词解释为使用bind
函数。您正在准确地使用它,尽管它也有另一个含义。
这不是很实用——在let
每个变量中都应该有意义。我会将其重构为:
(let [celsius 30
fahrenheit-unnormalized (* celsius 9/5)
fahrenheit (+ fahrenheit 32)
fahrenheit)
(我忽略了更好的解决方案:)
(+ (* temp 9/5) 32)
内部重新绑定let
通常可以使用线程宏之一来表示。以下表达式等效于问题中的表达式:
(-> 30 (* 9/5) (+ 32))
这个特定的表达式显然可以进一步简化,但经常->
或->>
在由于重用符号(重新绑定)导致的不可读性和由于嵌套导致的不可读性(如果用巨大的嵌套表达式替换重新绑定时发生)之间找到一个很好的位置。