This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2020-09-24
Channels
- # announcements (6)
- # architecture (9)
- # aws (2)
- # babashka (49)
- # beginners (160)
- # boot (19)
- # calva (9)
- # cider (16)
- # clj-kondo (17)
- # cljfx (9)
- # clojure (143)
- # clojure-australia (5)
- # clojure-berlin (1)
- # clojure-czech (3)
- # clojure-europe (64)
- # clojure-france (1)
- # clojure-italy (12)
- # clojure-nl (4)
- # clojure-spec (6)
- # clojure-uk (47)
- # clojurescript (27)
- # code-reviews (5)
- # conjure (45)
- # cursive (47)
- # datascript (2)
- # datomic (21)
- # events (1)
- # fulcro (9)
- # graalvm (4)
- # graphql (2)
- # jackdaw (22)
- # jobs (3)
- # kaocha (6)
- # london-clojurians (1)
- # luminus (4)
- # malli (19)
- # meander (136)
- # pathom (4)
- # pedestal (2)
- # re-frame (15)
- # reitit (2)
- # remote-jobs (2)
- # rum (12)
- # sci (1)
- # shadow-cljs (100)
- # spacemacs (10)
- # sql (1)
- # tools-deps (30)
- # vrac (1)
- # xtdb (30)
mi pare di ricordare vagamente che questo fosse un clojure gotcha che forse avevi citato tu @reborg?
scratchbook> (type (first '(+ 1 2)))
clojure.lang.Symbol
scratchbook> (type (first '(:k 1 2)))
clojure.lang.Keyword
forse con tipi primitivi ritorna direttamente il valore altrimenti un simbolo?
Quando quoti una form, viene quotato il contenuto della form ricorsivamente, quindi (type '+)
e’ diverso da (type +)
ahh la ragione e' questa quindi `imdb> (type '1) java.lang.Long`
che longs e simili non possono diventare simboli?
Un simbolo non puo’ iniziare con un numero https://clojure.org/reference/reader#_symbols piu’ altre regole
avevo capito che il + era quotato, non capivo perche' 1 o :keyword si comportavano in modo differnte
mm
imdb> (type '1)
java.lang.Long
imdb> (symbol :key)
key
imdb> (type ':key)
clojure.lang.Keyword
e
(symbol 1)
Execution error (IllegalArgumentException) at imdb/eval26888 (REPL:22).
no conversion to symbol
quindi anche longs e keywords si comporano leggermente diversamente
Il significato di (quote)
non e’ di transformare in symbol. quote
previene evaluation. In (+ 1 2)
il +
e’ sempre un symbol, ma quando e’ in parentesi ed in prima posizione, il simbolo +
viene usato da Clojure per cercare nel ns corrente (((ns-map *ns*) '+)
) ed invocare la funzione corrispondente. Quote previene evaluation, quindi vedi '+
come realmente e’. Altri tipi (numeri, keyword etc.) ritornano loro stessi quando evaluated o quoted.