Car*_*nes 0 var clojure preconditions
我有这个功能:
(defn executa-peso-individuo
[estado-individuo transicao-individuo]
(def tipos-transicoes-peso #{:troca-peso :mesmo-peso})
(def tipos-estados-peso #{:d :e})
{:pre [(contains? tipos-transicoes-peso
(:peso transicao-individuo))
(contains? tipos-estados-peso
(:peso estado-individuo))]
...
Run Code Online (Sandbox Code Playgroud)
先决条件不起作用.不知何故,vars tipos-transicoes-pes和tipos-estados-peso在前置条件代码中创建了一个bug.我知道我可以将这些变量放在我的功能之外以使其工作.但我想将这些定义保留在我的功能中.我怎样才能做到这一点?
为了使前后条件图像被识别,它必须紧跟参数向量.见http://clojure.org/special_forms#toc10.
虽然不是很常见的方法来打包这些将是包装你defn的let
(let [tipos-transicoes-peso #{:troca-peso :mesmo-peso}
tipos-estados-peso #{:d :e}]
(defn executa-peso-individuo
[estado-individuo transicao-individuo]
{:pre [(contains? tipos-transicoes-peso
(:peso transicao-individuo))
(contains? tipos-estados-peso
(:peso estado-individuo))]
...
Run Code Online (Sandbox Code Playgroud)
一般而言,仅限预留def和defn顶级使用.在顶级内部let是可以的,但同样,不常见.但是,绝对不要像在你的例子中那样在函数体内部使用.