Как я могу написать этот макрос Clojure более идиоматически? - PullRequest
0 голосов
/ 12 июня 2018
(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 Ответ

0 голосов
/ 12 июня 2018
(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
  )
...