Обновить и заменить значение карты

Я уверен, что это прямо здесь передо мной, но мне это не хватает. Изучите следующее:

(assoc :position entity
      (add (:position entity) (:velocity entity)))

Я хочу сделать что-то вроде этого (с поддельной функцией под названием altermap):

(altermap :position entity #((add % (:velocity entity)))

Каков предложенный метод? Есть ли встроенная функция для # 2?

Ответы

Ответ 1

update-in почти точно похож на вашу функцию altermap, за исключением того, что вместо одного ключа требуется вектор ключей. Итак:

(update-in entity [:position] #(add % (:velocity entity)))

Насколько я знаю, нет однозначного варианта update-in, но наличие скобок вокруг ключа не должно быть слишком громоздким.