在外面使用var - clojure

时间:2013-08-28 17:09:13

标签: clojure

在clojure中是否有任何方法允许在let结构中定义的var在命名空间的其他地方使用?

我遇到的问题是我需要两个单独的值。

例如,如果我有代码

    (defn example [x y z]
       (let [
          xy (* x y)
          xz (* x z)]
        xz))

我有没有办法在let之外使用xy?

我还应该注意,在这种情况下,xy和xz只是示例,真实的数据集是哈希映射,我尝试使用单独的函数单独获取每个集合,但由于系统的性质,我我似乎不太可能使用这个。

2 个答案:

答案 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中定义的变量只能在其中可见。如果您需要外部变量,您应该使用全局定义......但总的来说这不是一个好主意。如何将值作为参数传递给需要它的其他函数?