2013-08-22 60 views
13

虽然clojure和clojurescript功能基本相同(除了明显的区别),宏不是。当我需要clojurescript中的一个宏时,我必须将它写入clojure中,并要求它使用require-macros。这是JavaScript的技术限制还是只是一个设计决定?为什么两者不能相同?为什么clojurescript宏不能写入clojurescript?

回答

15

ClojureScript: Up and Running由Stuart Sierra和卢克VanderHart,第69页:

宏是在编译过程中应用。在运行时它们不存在 。由于 ClojureScript编译器是在Clojure中实现的,因此必须在Clojure中将ClojureScript宏编写为 ,而不是ClojureScript。幸运的是,当涉及到操作数据结构时,Clojure和ClojureScript几乎完全相同 ,因此在两种语言之间切换 并不困难。

这意味着宏代码在Clojure世界而不是在浏览器中执行,所以它必须用纯Clojure编写。

+1

就是这样,因为clojurescript使用谷歌封闭编译器,我想...用clojurescript编写的clojurescript编译器会很好。 – islon

+2

Google Closure编译器仅用于删除未使用的依赖关系并缩小代码,而不是将ClojureScript编译为JavaScript。当代码到达Google Closure Compiler时,它已经只是JavaScript,尽管ClojureScript团队努力确保所生成的JavaScript对于大多数高级Google Closure Compiler功能都是有效的。 – Serabe

+5

在相关说明中,正在对[clojurescript.net](http://clojurescript.net/)上的ClojureScript ClojureScript编译器进行工作。其中一位作者在[本视频]中进行了讨论(http://www.infoq.com/presentations/cljs-in-cljs)。 – bmaddy