我想这样做
(let [[a b c] '(1 2 3)]
{:a a :b b :c c}) ;; gives {:a 1, :b 2, :c 3}
但是[a b c]
保存在像这样的矢量中
(def vect '[a b c])
(let [vect '(1 2 3)]
{:a a :b b :c c}) ;; complains that a is unresolved
是否有可能以某种方式使用var来定义如何构造?
答案 0 :(得分:2)
发生错误,因为在此代码段中:
(let [vect '(1 2 3)]
{:a a :b b :c c})
您将vect
绑定到'(1 2 3)
。先前定义为vect
的{{1}}将被本地let绑定所遮蔽。 '[a b c]
,a
和b
将保持不受约束。
我认为你可以做你所要求的唯一方法是使用(滥用?)eval / macros,并构建你需要的确切形式。
c
但是,我真的恳请你在这里加入一些hammock time并考虑为什么需要使用var进行结构化,以及可能的替代设计。上面的解决方案已经很糟糕了,使用它可能会非常难看......
答案 1 :(得分:1)
我同意丹尼尔可能会重新考虑为什么你需要这样做的原因,例如:你究竟遇到了什么问题。
但如果你坚持:)假装我们确实使用“a b c ..”,你可以这样做:
user=> (def xs '[a b c])
#'user/xs
user=> (into {} (for [v xs] [(keyword v) v]))
{:a a, :b b, :c c}