Создайте карту из вектора тегов и формы

Я хочу написать обобщенную версию из этого кода

(fn[item] 
 {:tag1 ($x:text "./tag1" item) 
  :tag2 ($x:text "./tag2" item)})

Я думал об использовании zipmap, потому что я бы использовал вектор тегов, как это

[:tag1 :tag2],

но не знаю, как сделать обобщенную версию формы

($x:text "./tag1" item)

для любого данного элемента из вектора.

Есть идеи?

1 ответ

Решение

Это возможно с zipmap, используя одну и ту же коллекцию дважды:

(fn [item]
  (let [tags [:tag1 :tag2]]
    (zipmap tags
            (map (fn [tag]
                   ($x:text (str "./" (name tag)) item))
                 tags))))

но я думаю, что это на самом деле яснее, используя into:

(fn [item]
  (into {}
        (map (fn [tag]
               [tag ($x:text (str "./" (name tag)) item)])
             [:tag1 :tag2])))
Другие вопросы по тегам