2011-02-23 21 views
15

Estoy seguro de que está justo aquí frente a mí, pero me falta. Examinar lo siguiente:Actualizar y reemplazar el valor del mapa

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

Lo que quiero hacer es algo como esto (con una función de llamada falsa altermap):

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

¿Cuál es el método sugerido? ¿Hay una función incorporada para hacer # 2?

Respuesta

23

update-in es casi exactamente como su función altermap, excepto que toma un vector de teclas en lugar de una sola tecla. Por lo tanto:

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

A lo mejor de mi conocimiento no hay ninguna variante de clave única de update-in, pero tener que poner entre paréntesis alrededor de la clave no debe ser demasiado engorroso.

+0

Estoy de acuerdo. Encontré la actualización poco después de escribir esto. Y update-in tiene la buena capacidad de modificar árboles, lo que será realmente útil en mi proyecto. –

+8

Tenga en cuenta que la actualización anterior está destinada a ser escrita -por diseño- con menos parens que la anterior: '(entidad de actualización-in [: posición] add (: entidad de velocidad)) ' –

Cuestiones relacionadas