评论者:thheller
我在我的方法中发现了另一个问题。我的目标是使Closure Compiler能够在:advanced编译时删除断言。使用{{goog.define}}对* }进行操作时效果很好,但如果你试图稍后调整define,编译器会抱怨,因为{{goog.define}}变量不允许在运行时进行调整。
(binding [*assert* false] (something-that-asserts))
这在CLJ中有效,但在CLJS中无效,因为* }只在编译时进行检查。如果你使用{{:elide-asserts true}}编译,也无法将断言绑定到true,因为代码已不再存在。
无论如何,都必须做出一些妥协。据我所知,最好的解决方案是使用一个goog.define,让编译器决定是否消除断言,与* }无关,然后将断言检查本身移动到js而不是编译器中。
如有兴趣,我很乐意编写补丁。