问题描述
虽然 clojure 和 clojurescript 的功能基本相同(除了明显的差异),但宏不是.当我想要 clojurescript 中的宏时,我必须在 clojure 中编写它并使用 require-macros 来要求它.这是javascript的技术限制还是设计决定?为什么两者不能相同?
While clojure and clojurescript features are basically the same (apart from obvious differences), macros are not. When I want a macro in clojurescript I have to write it in clojure and require it with require-macros. Is that a technical limitation of javascript or just a design decision? Why can't both be the same?
推荐答案
来自 ClojureScript: Up and Running 作者Stuart Sierra 和 Luker VanderHart,第 69 页:
From ClojureScript: Up and Running by Stuart Sierra and Luker VanderHart, page 69:
在编译过程中应用宏.他们不存在在运行时.因为ClojureScript 编译器是在 Clojure 中实现的,必须编写 ClojureScript 宏在 Clojure 中,而不是 ClojureScript.幸运的是,Clojure 和 ClojureScript 几乎相同在操作数据结构时,两种语言之间的切换是不难.
这意味着宏代码是在 Clojure 世界中执行的,而不是在浏览器中执行,所以它必须用普通的 Clojure 编写.
What that means is that macro code gets executed in Clojure world and not in the browser, so it must be written in plain Clojure.
这篇关于为什么 clojurescript 宏不能用 clojurescript 编写?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!