我很好奇某些宏在做什么,并试图调用(macroexpand-1)
以获取更多信息。但是,对于如何扩展 ClojureScript 中的内置宏,尤其是cljs.core
命名空间中的宏,我有点困惑。根据文档,ClojureScript 宏是用 Clojure 编写的,因此必须在 Clojure REPL(而不是 ClojureScript REPL)中进行测试,这是我一直在尝试的地方。
从我的 ClojureScript 项目的目录中运行lein repl
,我试过这个:
=> (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")))
,扩展似乎工作正常。
好像我在概念上遗漏了一些东西......