Fork me on GitHub
#clojure-italy
<
2017-06-05
>
reborg09:06:14

@nilrecurring continuero' ad usare with-redefs per testing... mi e' solo capitato il caso in cui with-redefs non funzionava e non capivo il perche' 🙂

reborg09:06:44

solo che uno deve essere al corrente delle limitazioni... e ce ne sono altre

reborg09:06:01

ovviamente multi-threading o anche lazy-seqs

reborg09:06:08

uhm mi rimangio il lazy-seq:

(defn myinc [x] (println "inc" x) (inc x))
(let [m (with-redefs [myinc dec] (map myinc (range 10)))] (last m))
;; 8

reborg09:06:45

ero convinto che m venisse realizzata fuori dal with-redefs... uhm

nilrecurring09:06:31

Uhm avrei scommesso anche io sulla realizzazione fuori. Cose che invece potrebbero star succedendo: 1. with-redefs forza la realizzazione, oppure 2. la sequenza non viene realizzata, ma il lookup del simbolo viene fatto durante la costruzione della lazyseq

nilrecurring09:06:11

“Lazyseqs considered harmful”

bronsa10:06:52

@reborg prova #(myinc %) 😉

reborg11:06:15

Ah ah ecco, me l'avevi pure detto. Questo e' un caso del local che viene settato in ingresso, legge il var root e non puo' piu' essere ridefinito

reborg11:06:07

pero' non mi spiego ancora perche' with-redefs funziona quando la lazy-seq e' realizzata fuori dal blocco

bronsa11:06:35

la sequenza e` lazy ma l'evaluation di clojure e` comunque strict -- myinc nel map viene comunque ridefinito a dec strictly visto che e` usato come argomento

nilrecurring11:06:56

Nice, quindi il caso 2.

reborg11:06:57

la list di "beware of" di with-redefs si allunga di giorno in giorno 🙂

nilrecurring12:06:24

In realtà qua si comporta come dovrebbe

nilrecurring12:06:47

Quindi hai problemi solo con partial e multithreading

reborg12:06:37

@nilrecurring si comporta sempre come dovrebbe (c'e' sempre un motivo dopo averlo scoperto). Se sorprende solo me quello e' un altro discorso

nilrecurring12:06:27

Sarebbe carino se funzionasse anche in questi corner cases 🙂

nilrecurring12:06:39

(`partial` sorprende anche me TBH)

nilrecurring12:06:13

Se sai come funziona ovviamente non sorprende più, ma conta l’intuizione che avevi prima