clojure:函数中定义的变量正在破坏前提条件
我有这个功能:clojure:函数中定义的变量正在破坏前提条件,clojure,var,preconditions,Clojure,Var,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 tra
(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))]
...
先决条件不起作用。不知何故,vars tipos transicoes pes和tipos estados peso在预处理代码中创建了一个bug。
我知道我可以把这些变量放在我的功能之外,让它工作。但是我想在我的函数中保留这些定义。我该怎么做呢?你把条件放错地方了。它们应该跟踪函数的参数向量
(defn fun [param-1 param2]
{:pre [ ]
:post [ ]}
;; body goes here
)
你把条件放错地方了。它们应该跟踪函数的参数向量
(defn fun [param-1 param2]
{:pre [ ]
:post [ ]}
;; body goes here
)
为了识别前置和后置条件映射,它必须立即跟随参数向量。看 一种可以接受但不是很常见的打包方式是将
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))]
...
一般来说,保留
def
和defn
仅供顶级使用。在顶级中,让也可以,但同样不常见。但是,绝对不要像您的示例中那样在函数体内部使用。为了识别前置和后置条件映射,它必须立即跟随参数向量。看
一种可以接受但不是很常见的打包方式是将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))]
...
一般来说,保留def
和defn
仅供顶级使用。在顶级中,让也可以,但同样不常见。但是,绝对不要像您的示例中那样在函数体内部使用。为什么要在函数内部定义变量?这被认为不是一个好的实践。为什么要在函数中定义变量?这被认为是不好的做法。