Sintassi più idiomatica per l'aggiornamento del valore vettoriale di secondo livello

0

Sono abbastanza sicuro che ci debba essere un modo più idiomatico di scrivere questo:

(defn update-2nd-level-vector
  [map index value]
  (assoc map :key1 (assoc (get map :key1) :key2 (-> map (get-in [:key1 :key2]) (assoc index value)))))

Esempio del suo funzionamento:

=> (update-2nd-level-vector {:key1 {:key2 [0 1]}} 0 1)
{:key1 {:key2 [1 1]}}
    
posta m0skit0 06.07.2014 - 22:36
fonte

1 risposta

0

devi usare update-in..anche la tua funzione non è abbastanza flessibile, sei limitato a usarlo solo nelle mappe con quelle chiavi ..

questo è un po 'più pratico

(defn update-level [keyspos mapp index value]
  (assoc-in mapp keyspos (assoc (get-in mapp keyspos) index value)))

puoi usarlo

(update-level [:key1 :key2] {:key1 {:key2 [0 1]}}  0 3)

o simile alla tua funzione

(def update-2nd-level-vector2  (partial update-level [:key1 :key2]))

(update-2nd-level-vector2 {:key1 {:key2 [0 1]}} 0 3)
    
risposta data 05.04.2015 - 05:14
fonte

Leggi altre domande sui tag