16

虽然 clojure 和 clojurescript 功能基本相同(除了明显的差异),但宏却不是。当我想要一个 clojurescript 中的宏时,我必须在 clojure 中编写它并使用 require-macros 来要求它。这是 javascript 的技术限制还是仅仅是设计决定?为什么两者不能一样?

4

1 回答 1

18

来自ClojureScript: Stuart Sierra 和 Luker VanderHart 的 Up and Running,第 69 页:

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

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

于 2013-08-22T13:29:01.593 回答