使用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)
答案 0 :(得分:1)
def
并不确保fromvar
与value
的绑定相关联。在fromvar
被调用时,它会x
分配def
的值。由于尚未定义x
,因此该值未绑定(字面上是内部类Var.Unbound
的实例)。 fromfun
在编译时没有内联x
的值,因此可以在运行时自由地找到正确的值,反映后面的赋值。