Fork me on GitHub
#clojure-italy
<
2018-06-21
>
manuel05:06:14

^ mattiniero. Buondì

reborg05:06:52

stamattina e' andata cosi', devo finire le slides per un workshop...

bronsa09:06:03

notizie sempre piu` deprimenti dal governo italiano vedo

😰 4
manuel10:06:54

veramente ...

alan10:06:32

Lasciamo stare, non fatemi venire voglia di tornare all'estero...

manuel10:06:28

so come ti senti, c'è stato un momento l'anno scorso che ero a un passo dal farlo di nuovo

😅 4
richiardiandrea15:06:08

Che è successo? Fammi aprire il sito della Stampa

bronsa18:06:23

pop quiz del giorno

bronsa18:06:05

perche` il primo snippet va

Clojure 1.10.0-master-SNAPSHOT
user=> (deftype T [x])
user.T
user=> (defn f [^T t] (.-x t))
#'user/f
user=> (deftype T [x])
user.T
user=> (f (T. 1))
1
mentre il secondo no
Clojure 1.10.0-master-SNAPSHOT
user=> (deftype T2 [x])
user.T2
user=> (defn f2 [^T2 t] (.-x t))
#'user/f2
user=> (f2 nil)
NullPointerException   user/f2 (NO_SOURCE_FILE:6)
user=> (deftype T2 [x])
user.T2
user=> (f2 (T2. 1))
ClassCastException user.T2 cannot be cast to user.T2  user/f2 (NO_SOURCE_FILE:6)

gabriele18:06:04

@bronsa sparando a caso, il type hint di clojure è a runtime quindi quando chiami (f (T. 1)) nel primo il T bindato è il secondo mentre nel secondo caso quando fai (f2 nil) binda il T2 definito per primo e poi quando ridefinisci T2 viene creata una nuova classe che è diversa da quella bindata prima

gabriele18:06:23

ma sto davvero andando a caso, non so come funziona in type hint o deftype