This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-06-21
Channels
- # aws (2)
- # aws-lambda (1)
- # beginners (62)
- # cider (31)
- # cljs-dev (16)
- # cljsrn (8)
- # clojure (115)
- # clojure-greece (3)
- # clojure-israel (2)
- # clojure-italy (13)
- # clojure-nl (8)
- # clojure-russia (5)
- # clojure-spec (3)
- # clojure-uk (146)
- # clojurescript (108)
- # clojutre (5)
- # code-reviews (3)
- # cursive (48)
- # datomic (22)
- # editors (20)
- # emacs (7)
- # fulcro (16)
- # graphql (10)
- # mount (2)
- # off-topic (47)
- # onyx (22)
- # re-frame (100)
- # reagent (5)
- # reitit (7)
- # ring-swagger (6)
- # rum (5)
- # shadow-cljs (51)
- # specter (2)
- # tools-deps (95)
- # vim (10)
- # yada (7)
so come ti senti, c'è stato un momento l'anno scorso che ero a un passo dal farlo di nuovo
😅 4
Che è successo? Fammi aprire il sito della Stampa
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)
@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