Clojure 使用标记向量和表单创建地图

Clojure 使用标记向量和表单创建地图,clojure,zipmap,Clojure,Zipmap,我想用这段代码编写一个通用版本 (fn[item] {:tag1 ($x:text "./tag1" item) :tag2 ($x:text "./tag2" item)}) 我在考虑使用zipmap,因为我会使用标签向量,就像这样 [:tag1 :tag2], 但我不知道如何做一个广义的形式 ($x:text "./tag1" item) 对于向量中的任何给定项 有什么想法吗?这可以通过使用同一个集合两次来实现: (fn [item] (let [tags [:tag1

我想用这段代码编写一个通用版本

(fn[item] 
 {:tag1 ($x:text "./tag1" item) 
  :tag2 ($x:text "./tag2" item)})
我在考虑使用zipmap,因为我会使用标签向量,就像这样

[:tag1 :tag2],
但我不知道如何做一个广义的形式

($x:text "./tag1" item)
对于向量中的任何给定项


有什么想法吗?

这可以通过使用同一个集合两次来实现:

(fn [item]
  (let [tags [:tag1 :tag2]]
    (zipmap tags
            (map (fn [tag]
                   ($x:text (str "./" (name tag)) item))
                 tags))))
但我认为在中使用
实际上更清楚:

(fn [item]
  (into {}
        (map (fn [tag]
               [tag ($x:text (str "./" (name tag)) item)])
             [:tag1 :tag2])))

$x:tag1
$x:tag2
在哪里定义,它们是做什么的?另外,您的示例中有一个太多的
{
,或者可能有一个太少的
}
,这将是函数的一部分,该函数将有一个向量作为输入参数,该向量由标记[:tag1:tag2]组成,是的,我有一个{对许多人来说……你是想让
$x:tag1
作为函数名,还是
$x
:tag1
作为第一个参数,而空格丢失了?不,对不起,我的错,只是看到$x:带有:text,而不是:tag,我复制了错误的代码这是一个clj xpath函数