【发布时间】:2011-07-22 21:09:14
【问题描述】:
使用 let 返回绑定的 var 是否不明智?
(let [pipeline (Channels/pipeline)]
(.addLast pipeline "codec" (HttpClientCodec.))
;; several more lines like this
pipeline)
这里的绑定是否只是词法范围(与 def 相对)而不是不安全的传递?
更新 在写这个问题时,我意识到上面的内容很丑陋。如果 Clojure 中有什么丑陋的地方,那么你可能做错了。
我认为这可能是处理上述问题的更惯用的方式(这使得问题没有实际意义,顺便说一句,但仍然是方便的知识)。
(doto (Channels/pipeline)
(.addLast "codec" (HttpClientCodec.)))
【问题讨论】:
-
doto并没有真正让这个问题变得毫无意义,因为使用doto的代码版本扩展为与原始版本相同的内容。但它确实告诉你这样做一定没问题,否则doto就不会这样写了! -
是的,这就是我的意思,以及为什么我将问题的答案留给后代:D。惯用的表达方式揭示了底层结构。
标签: functional-programming clojure idioms