This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-07-09
Channels
- # beginners (20)
- # boot (4)
- # cider (2)
- # cljs-dev (25)
- # clojure (45)
- # clojure-dev (1)
- # clojure-greece (5)
- # clojure-italy (20)
- # clojure-nl (12)
- # clojure-russia (11)
- # clojure-uk (256)
- # clojurescript (176)
- # data-science (33)
- # datomic (47)
- # docs (1)
- # duct (13)
- # fulcro (54)
- # graphql (24)
- # hoplon (3)
- # jobs (1)
- # leiningen (32)
- # luminus (3)
- # midje (1)
- # mount (2)
- # off-topic (3)
- # onyx (5)
- # overtone (1)
- # parinfer (12)
- # pedestal (4)
- # re-frame (60)
- # reagent (11)
- # reitit (3)
- # ring-swagger (21)
- # rum (1)
- # shadow-cljs (16)
- # spacemacs (23)
- # tools-deps (19)
- # vim (79)
Ho questo problema ricorrente, cioe' una mappa le cui keys possono essere nil
oppure empty strings, e vorrei una logica del tipo (or :a :b :c :d)
. Risolto per ora con la seguente. Qualche altra idea? Un nome migliore?
(require '[clojure.string :refer [blank?]])
(defn if-present [m & ks] (some #(cond-> % (blank? %) seq) ((apply juxt ks) m)))
(if-present {:a "" :b nil :d "yes"} :a :b :c :d)
;; "yes"
(defn if-present
[m & ks]
(reduce (fn [acc k]
(let [v (get m k)]
(if-not (clojure.string/blank? v) (reduced v) acc))) nil ks))
@reborg io la preferisco così, la combo some, cond->, apply e juxt mi manda ammalegrazie entrambe... sapevo che c'era qualcosa di piu' semplice in giro... e che non lo vedevo!
il not-empty
e' la chiave in questo caso... cercavo proprio il (seq s)
che non cambia la stringa se non e' nil or empty. Ed e' proprio non-empty
a me fa un po' strano usare comp per combinare una funzione con una mappa per sfruttarne il fatto che la puoi trattare come una funzione
non la definisco con defn o fn quindi non è una funzione a livello di linguaggio, per lo meno una funzione che vedi normalmente
non e' molto diverso da (some #{:a :b :c} [1 2 :a 3 4])
@gabriele.carrettoni, che si vede abbastanza in giro