I am trying to create a little Clojure macro that defs a String with a type hint:
(defmacro def-string [name value]
`(def ^String ~name ~value))
(def-string db-host-option "db-host")
When I macroexpand it, the type hint is lost:
(macroexpand '(def-string db-host-option "db-host"))
;=> (def db-host-option "db-host")
Never mind the wisdom of type hinting this.
Why is the macro losing the metadata? How do I write this macro, or any that includes metadata?
^is a reader macro.defmacronever gets to see it. The hint is put on the list(unquote name). Compare for example(meta ^String 'x)with(meta ' ^String x)to see the effect.You need to put the hint on the symbol.
And the usage: