在clojure中是否有任何方法允许在let结构中定义的var在命名空间的其他地方使用?
我遇到的问题是我需要两个单独的值。
例如,如果我有代码
(defn example [x y z]
(let [
xy (* x y)
xz (* x z)]
xz))
我有没有办法在let之外使用xy?
我还应该注意,在这种情况下,xy和xz只是示例,真实的数据集是哈希映射,我尝试使用单独的函数单独获取每个集合,但由于系统的性质,我我似乎不太可能使用这个。
答案 0 :(得分:2)
当您需要来自单个函数的多个结果时,解构很有用
(defn example
[x y z]
(let [xy (* x y)
xz (* x z)]
[xy xz]))
(defn other-example
(let [[xy xz] (example 1 2 3)]
(println 'xy xy 'xz xz)))
答案 1 :(得分:1)
不,根据定义,let
中定义的变量只能在其中可见。如果您需要外部变量,您应该使用全局定义......但总的来说这不是一个好主意。如何将值作为参数传递给需要它的其他函数?