ClojureScript对前置和后置条件进行了高级编译



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

(ns project.lib
  (:require [cljs.test :refer-macros [is]]))
(defn my-fn [p]
  {:pre  [(is (#{:allowed-key :another-allowed-key} p))]}
  ;;...
  )

我想知道我是否可以控制:pre:post断言的行为,以及通常如何确保不包括与参数检查相关的一些代码。

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

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

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

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

还要注意的是,通常情况下,cljs.test名称空间只用于单元测试名称空间,这些名称空间将被放置在一个单独的目录中(可能在"test"下,而不是"src"下),如果使用lein,您将使用:source-paths,以便在生产构建中不包括测试。

话虽如此,在生产代码中使用:pre:post是非常好的——只需使用"正则"谓词而不是cljs.testis宏。对于您的具体示例,is可以被删除,因为前提条件只是需要评估一些真实的东西。

最新更新