seq 是来自 PersistentVector 吗
(seq [1 2 3])
比 PersistentList 中的 seq 更快
(seq '(1 2 3))
当我们将元素推入其中时? 除了类型之外,它们的性能是否相同?
我试图在互联网上寻找答案,但不幸的是没有找到任何关于
的比较(seq [1 2 3])
和
(seq `(1 2 3))
[1 2 3]
的类型是PersistentVector,(1 2 3)
的类型是clojure.lang.Cons。
ASeq
的实例,则它有一个快捷方式,否则调用 RT.seqFrom
创建一个新序列。由于 Cons
已经是 ASeq
的实例,因此它只会返回参数,而不创建新的 seq 对象。
user=> (def abc `(1 2 3))
#'user/abc
user=> (identical? abc (seq abc))
true
总而言之,调用
(seq '(1 2 3))
应该比调用 (seq [1 2 3])
稍快一些,因为在前一种情况下,它只是直接返回参数,但在后一种情况下,会为向量分配一个新的 ChunkedSeq
。
但是,请注意,在生产环境中差异可能仍然可以忽略不计,并且在为真正的低延迟应用程序编写代码时需要考虑许多其他因素。