Clojurians
#clojure-italy
<
2017-09-06
>

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

kors07:09:27

Buongiorno

nilrecurring07:09:25

La giornata comincia bene con la frustrazione di dovermi reimplementare map-vals e map-keys in ogni progetto

nilrecurring07:09:57

(Si, potrei usare una lib, ma non voglio dipendenze a caso, e dovrebbero davvero stare in core)

reborg07:09:48

reduce-kv?

kors07:09:08

Devi iterare solo sugli uno o sugli altri?

kors07:09:57

(map #(println %) (keys mappa)) ?

kors07:09:31

Forse non ho capito :smile:

nilrecurring07:09:05

E.g. se voglio trasformare le keys di una map da stringhe a keywords l’interfaccia che voglio è (map-keys keyword {"a" 1 "b" 2})

nilrecurring07:09:56

@reborg reduce-kv è un livello sotto, la usi effettivamente per implementare map-keys e map-vals

reborg07:09:37

non sono sicuro del perche' non sia mai stata considerata l'inclusione in core...

reborg07:09:37

un trick per map-vals potrebbe essere ((comp inc {:a 1 :b 2}) :a)

kors07:09:56

user> (def mappetta {"a" 1 "b" 2})
#'user/mappetta
user> (map keyword (keys mappetta))
(:a :b)
user> 

kors07:09:41

@nilrecurring tu parli di una cosa del genere?

nilrecurring07:09:58

@kors no, per (map-keys keyword {"a" 1 "b" 2}), out: {:a 1 :b 2}

nilrecurring07:09:51

@reborg in realtà c’è un bug aperto da un anno: https://dev.clojure.org/jira/browse/CLJ-1959

nilrecurring07:09:56

“Feature, Major”

kors07:09:22

ora ho finalmente capito.

reborg07:09:08

mettiamoci +1 per votarla e vediamo che succede

reborg08:09:23

bel talk by zach, c'e' un bel po' da metabolizzare. Ispirante

skuro09:09:55

@nilrecurring nel nostro codebase interno abbiamo qualcosa di simile per gestire i JSON in ingresso all'applicazione, basato su clojure.walk/postwalk

skuro09:09:09

tradotto in quello che ti serve sarebbe

(defn map-keys
  "Recursively translates keys of a map using f"
  [f m]
  (let [f (fn [[k v]] [(f k) v])]
    (w/postwalk (fn [x] (if (map? x) (into {} (map f x)) x)) m)))

skuro09:09:48

che funziona con strutture dati nested a piacere

skuro09:09:25

user> (def _x {"a" [{"b" 42} {"c" 24}]})
#'user/_x
user> (map-keys keyword _x)
{:a [{:b 42} {:c 24}]}

skuro09:09:48

beh, non necessariamente quello che ti serve, ma e' quello che serve a noi :slightly_smiling_face:

nilrecurring10:09:14

Oh, molto pratico :slightly_smiling_face:

nilrecurring10:09:26

L’avrei chiamata map-keys*

reborg17:09:41

iorno, che ore fanno dalle tue parti?

richiardiandrea17:09:23

qui sono le 10AM

reborg23:09:25

e qui 00:25 passo e chiudo :slightly_smiling_face: