尽管Clojure和ClojureScript的功能基本相同(除了明显的差异),但宏并非如此。当我想在ClojureScript中使用宏时,我必须在Clojure中编写它,并使用require-macros导入它。这是JavaScript的技术限制还是设计决策呢?为什么不能两者相同?
尽管Clojure和ClojureScript的功能基本相同(除了明显的差异),但宏并非如此。当我想在ClojureScript中使用宏时,我必须在Clojure中编写它,并使用require-macros导入它。这是JavaScript的技术限制还是设计决策呢?为什么不能两者相同?
来自Stuart Sierra和Luker VanderHart的ClojureScript: Up and Running第69页:
宏在编译过程中应用。它们不存在于运行时。因为ClojureScript编译器是用Clojure实现的,所以ClojureScript宏必须用Clojure而不是ClojureScript编写。幸运的是,当涉及到操作数据结构时,Clojure和ClojureScript几乎相同,所以在两种语言之间切换并不困难。
这意味着宏代码在Clojure世界中执行而不是在浏览器中执行,因此必须使用纯Clojure编写。