使用声明时,Lein测试在未绑定的var上失败

时间:2015-04-03 18:58:40

标签: clojure leiningen

使用lein test运行时,为什么以下测试中的最后一个断言失败?

我不明白为什么前两个断言正确获得后期绑定值,但fromvar值被视为未绑定。

(declare x)

(def fromvar x)
(defn fromfun [] x)

(deftest declaretest

  ;; These pass fine
  (is (= 1 x))
  (is (= 1 (fromfun)))

  ;; This fails on lein test:
  ;; expected: (= 1 fromvar)
  ;;   actual: (not (= 1 #<Unbound Unbound: #'my-test/value>))
  (is (= 1 fromvar)))

(def x 1)

1 个答案:

答案 0 :(得分:1)

def并不确保fromvarvalue的绑定相关联。在fromvar被调用时,它会x分配def的值。由于尚未定义x,因此该值未绑定(字面上是内部类Var.Unbound的实例)。 fromfun在编译时没有内联x的值,因此可以在运行时自由地找到正确的值,反映后面的赋值。