clojure.test 失败的输出中的圆括号是什么意思?

What do round brackets mean in the output of clojure.test failures?

我的一个测试中有以下输出:

Assertion failed:
Expected :[[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] ["seq07"] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []]
Actual   :[() () () () () () () () () () () () () () () () () () () () () () () () () () ("seq07") () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()]

此输出中的 ()("seq07") 是什么意思?

() 是列表的表示法,而 [] 是向量的表示法

() 是一个空列表,("seq07") 是一个包含单个成员的列表 - 字符串 seq07

您可以阅读有关 Clojure 列表的更多信息here

编辑:刚刚发现这个interesting SO question关于列表与向量

如另一个答案所述,() 是一个空列表,[] 是一个空向量。

但是请注意,= 比较列表和向量的内容,它会忽略容器的类型:

(= '("seq07") ["seq07"])           ;; => true
(= '(()) [[]])                     ;; => true

问题中的断言失败是由于 actual 向量的元素少于 expected 向量:

(= ['("seq07")] ['("seq07") '()])  ;; => false