Придуманный пример для иллюстрации:
(def nest1 {:a {:b {:c "foo"}}})
(def nest2 {:d {:e "bar"}})
Если бы я хотел соединить эти гнезда на произвольных уровнях, я мог бы явно сделать это:
(conj (-> nest1 :a :b) (-> nest2 :d)) ; yields {:e "bar", :c "foo"}
(conj (-> nest1 :a) (-> nest2 :d)) ; yields {:e "bar", :b {:c "foo"}}
Но что если я захочу создать функцию, которая будет принимать "глубину" nest1 и nest2 в качестве параметров?
; Does not work, but shows what I am trying to do
(defn join-nests-by-paths [nest1-path nest2-path]
(conj (-> nest1 nest1-path) (-> nest2 nest2-path))
И я мог бы попытаться назвать это так:
; Does not work
(join-nests-by-paths '(:a :b) '(:d))
Это не работает. Я не могу просто передать каждый «путь» в виде списка функции (или, возможно, смогу, но мне нужно работать с ним по-другому в функции).
Есть мысли? ТИА ...
Шон