2

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

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

例如,如果我有代码

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

我有什么办法可以在 let 之外使用 xy 吗?

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

4

2 回答 2

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)))
于 2013-08-28T17:27:35.160 回答
1

不,根据定义,在 a 中定义的变量let只会在其中可见。如果您需要外部变量,也许您应该使用全局定义......但总的来说这不是一个好主意。将值作为参数传递给需要它的其他函数怎么样?

于 2013-08-28T17:13:50.110 回答