我的一个测试中有以下输出:
Assertion failed:
Expected :[[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] ["seq07"] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []]
Actual :[() () () () () () () () () () () () () () () () () () () () () () () () () () ("seq07") () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()]
()
和("seq07")
在这个输出中是什么意思?
正如另一个答案中所指出的,()
是一个空列表,[]
是一个向量。
然而,请注意,=
比较列表和向量的内容,它忽略了容器的类型:
(= '("seq07") ["seq07"]) ;; => true
(= '(()) [[]]) ;; => true
问题中的断言失败是由于actual
矢量比expected
矢量具有更少的元素:
(= ['("seq07")] ['("seq07") '()]) ;; => false
()
是列表的表示法,而[]
是向量的表示法
()
是一个空列表,("seq07")
是一个包含单个成员的列表——字符串seq07
你可以在这里阅读更多关于clojure列表的信息
编辑:刚刚发现这个有趣的SO问题关于列表vs向量