【发布时间】:2012-01-01 09:36:10
【问题描述】:
我在弄清楚如何使用“let”表单时遇到了一些麻烦。在下面的示例中,我想在本地绑定值“cols”,以便稍后在函数中对其进行处理。然而,我注意到的是,如果我使用“let”,函数 sel-opt-tmp 将返回一个 nil 值而不是一个列表。
(defn sel-opt-tmp []
(let [cols "test"]))
(prn (sel-opt-tmp))
*上面的代码返回一个nil值。
我知道“let”只绑定函数范围内的值,我不知道是否有办法将值传递到 let 范围之外。也许有我不知道的“返回”之类的东西?或者这只是糟糕的设计,在这种情况下我根本不应该使用绑定(这往往会创建难以阅读的长链函数)?
【问题讨论】:
-
let表单隐式返回它包含的最后一个表达式,在您的情况下是不可见的nil。您需要在let表单的正文中使用cols才能将其返回。 -
"let" only binds a value in the scope of a function-- 这并不完全正确。lets 几乎可以出现在任何地方,绑定名称的范围是let表达式。