欢迎!请参阅关于页面了解有关此内容的一些更多信息。
以下是一个产生无效JavaScript的最小测试用例
`(defn f [](let [a 0]
`
^{"meta" "data"} (fn [] true)))
编译后的JavaScript包含了无效的令牌序列 "return return"。(按Chrome:未捕获的语法错误: unexpected token return)
如果元数据应用到映射字面量而不是函数字面量,则不会出现此问题。问题仅当函数和元数据位于let内部时才会出现。
评论由:bobby.eickhoff
我忘记尝试使用with-meta了。使用with-meta不会产生此语法错误,所以这只是元数据读取运算符的问题。
评论由:dnolen
对此有什么快速的想法,Nicola?这可能是CLJS一侧的编译器问题。
嗯,看起来 {{analyze-wrap-meta}} 可能需要委托给辅助程序来改变给定 AST 节点的 {{:上下文}}。
评论者:bendlas
我在升级一个老项目时不经意间遇到了这个问题。还有已存在的重复项: http://dev.clojure.org/jira/browse/CLJS-1482
评论者:gingenhagen
即使没有 let,这个问题也会发生。
(fn [] ^{"meta" "data"} (fn [] true))
得到