Мне было любопытно, что делают определенные макросы, и я попытался позвонить (macroexpand-1)
, чтобы получить дополнительную информацию. Однако я немного запутался в том, как расширить встроенные макросы в ClojureScript, особенно макросы в пространстве имен cljs.core
. Согласно документации, макросы ClojureScript написаны на Clojure и, следовательно, должны быть протестированы в Clojure REPL (вместо ClojureScript REPL), откуда я пробовал это.
Запустив lein repl
из каталога моего проекта ClojureScript, я пробовал это:
=> (require 'cljs.compiler)
=> (require 'cljs.core)
=> (macroexpand-1 '(cljs.core/int 99.9))
(macroexpand-1 '(cljs.core/int 99.9))
(cljs.core/int 99.9)
Почему возвращается (cljs.core/int 99.9)
? На основе источника ClojureScript не следует Разве этот макрос не расширяется до чего-то вроде (bit-or ~x 0)
?
Когда я раскрываю макросы, не относящиеся к ClojureScript, например (macroexpand-1 '(when (even? 2) (println "2 is even")))
, расширение работает нормально.
Похоже, я что-то концептуально упускаю ...