我很难看到这是如何完成的。如何在不编写任何JS的情况下将其转换为JS(一切都在Clojure或CS中)。
有人可以给出一个简单的例子,说明编译器如何将简单的东西转换为javascript。也许(def x“foo”)或(defn [x](+ x x))?
答案 0 :(得分:5)
发送JavaScript由cljs.compiler命名空间处理。 (该链接指向主分支上的源。)正如您所看到的,它归结为将字符串打印到文件。
当然,哪些字符串完全取决于ClojureScript源,但不是直接依赖:原始源首先转换为在编译过程中更有用的不同表示。这发生在cljs.analyzer命名空间中。
分析器比编译器更加复杂。对于(def x "foo")
示例,它将生成一个相当简单的映射,该映射将由编译器的:def
多方法的emit
方法处理;搜索defmethod emit :def
。需要注意的是调用munge
(将ClojureScript标识符转换为有效的JavaScript标识符;例如foo-bar
- > foo_bar
)以及emits
调用init
}作为参数之一,其中init
的表示将以递归方式生成。 (在这种情况下,它只是"foo"
。)