ClojureScript高级编译前后条件

时间:2016-03-25 16:11:10

标签: clojurescript google-closure-compiler

我在ClojureScript项目中有以下代码:

(ns project.lib
  (:require [cljs.test :refer-macros [is]]))

(defn my-fn [p]
  {:pre  [(is (#{:allowed-key :another-allowed-key} p))]}
  ;;...
  )

我想知道是否可以控制:pre:post断言的行为,通常是什么方法可以确保不包含与参数检查相关的代码。< / p>

注意:我知道:closure-define编译器选项,但不知道如何将其应用于此特定情况。

1 个答案:

答案 0 :(得分:1)

您可以将编译器选项.doc设置为:elide-asserts以消除所有断言,包括true:pre断言。

此标志独立于:post,即使在该模式下也需要设置,以消除生产代码中的断言。

请参阅https://github.com/clojure/clojurescript/wiki/Compiler-Options#elide-asserts

另请注意,通常,:advanced命名空间仅用于单元测试命名空间,这些命名空间将放在单独的目录中(可能位于cljs.test下而不是"test" ),如果使用"src",则使用lein以便不在生产版本中包含测试。

话虽如此,使用:source-paths:pre在生产代码中完全没问题 - 只需使用&#34;常规&#34;谓词而不是:post cljs.test宏。对于您的具体示例,is可以被删除,因为前提条件只需要评估为真实的东西。