Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么clojurescript宏可以';不能用clojurescript写吗?_Clojure_Clojurescript - Fatal编程技术网

为什么clojurescript宏可以';不能用clojurescript写吗?

为什么clojurescript宏可以';不能用clojurescript写吗?,clojure,clojurescript,Clojure,Clojurescript,虽然clojure和clojurescript的特性基本相同(除了明显的差异),但宏却不同。当我想在clojurescript中使用宏时,我必须在clojure中编写宏,并使用require宏进行require。这是javascript的技术限制还是仅仅是设计决策?为什么两者不能相同?摘自斯图尔特·塞拉和卢克·范德哈特的著作,第69页: 宏是在编译过程中应用的。它们不存在 在运行时。因为 ClojureScript编译器是在Clojure中实现的,必须编写ClojureScript宏 在Cloj

虽然clojure和clojurescript的特性基本相同(除了明显的差异),但宏却不同。当我想在clojurescript中使用宏时,我必须在clojure中编写宏,并使用require宏进行require。这是javascript的技术限制还是仅仅是设计决策?为什么两者不能相同?

摘自斯图尔特·塞拉和卢克·范德哈特的著作,第69页:

宏是在编译过程中应用的。它们不存在 在运行时。因为 ClojureScript编译器是在Clojure中实现的,必须编写ClojureScript宏 在Clojure中,不是ClojureScript。幸运的是,Clojure和ClojureScript几乎完全相同 在处理数据结构时,在两种语言之间切换是非常困难的 不难


这意味着宏代码是在Clojure world中执行的,而不是在浏览器中执行的,因此必须用普通的Clojure编写。

这是因为clojurescript使用了我想象中的google闭包编译器。。。用clojurescript编写的clojurescript编译器就好了。Google闭包编译器只用于删除未使用的依赖项和缩小代码,而不是将clojurescript编译成JavaScript。当代码到达Google Closure编译器时,它已经是JavaScript了,尽管ClojureScript团队努力确保生成的JavaScript对于最高级的Google Closure编译器功能是有效的。其中一位作者在文章中对此进行了讨论。