Как я могу написать этот макрос Clojure более идиоматически?
(defmacro get-color [color-name]
`@(thi.ng.color.core/as-int32 (var-get (resolve (symbol "thi.ng.color.core"
(str '~color-name))))))
Мне нравится избегать использования (var-get (resolve (symbol ... (str '~parem))))
, Что-то вроде thi.ng.color.core/(~color-name)
,
(Я использую этот макрос в очень маленьком личном проекте, и мне все равно, если это действительно плохая практика - создавать макрос для этого варианта использования. Хотя мне нравится знать, почему это будет проблематично в больших проектах.)
1 ответ
Решение
(require 'thi.ng.color.core)
(defmacro get-color
[color-name]
(let [sym (symbol "thi.ng.color.core"
(str color-name))]
`@(thi.ng.color.core/as-int32 ~sym)))
(comment
(get-color "RED") ;;=> 4294901760
(get-color RED) ;;=> 4294901760
)