当我的数据与一个独立于其参数的函数相关时,我何时应该优先使用块封装而不是局部封装?
我什么时候应该使用:
(let [hello "Hello "]
(defn do-greet
"Print a greeting."
[name]
(println (str hello name))))
Run Code Online (Sandbox Code Playgroud)
与:
(defn do-greet
"Print a greeting."
[name]
(let [hello "Hello "]
(println (str hello name))))
Run Code Online (Sandbox Code Playgroud)
如果要在词法范围的代码块中使用类似静态常量的值,前者是一个合理的选项.通常,您会在以下情况下执
在大多数其他情况下,后一版本应该是首选版本,这有几个原因:
这是一种风格选择,应该至少可以依赖于价值的计算成本.请考虑一下:
(defn nth-prime [n] ...)
(defn f [x]
(let [factor (nth-prime 10000)]
(* x factor)))
(let [factor (nth-prime 10000)]
(defn g [x]
(* x factor)))
Run Code Online (Sandbox Code Playgroud)
每次重新计算一个昂贵的常量f被称为浪费,并g使用一种简单的技术来避免这样做.