- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Scala Collection documentation ,这个问题有一些线索:
Trait Seq has two subtraits LinearSeq, and IndexedSeq. These do not add any new operations, but each offers different performance characteristics: A linear sequence has efficient head and tail operations, whereas an indexed sequence has efficient apply, length, and (if mutable) update operations.
IndexedSeq
而不是
Seq
?
IndexedSeq
的真实示例或
LinearSeq
这些集合比
Seq
做得更好.
最佳答案
Seq
是超特征,所以它更通用,它具有所有序列共有的特征,包括线性和索引。
如果您想知道 Seq.apply
创建了什么样的序列Seq 的伴生对象中的方法,我们可以看一下实现。
请记住 如果您使用 Seq.apply,则意味着您只需要一个 Seq,并且您的代码并不关心它是线性的还是索引的
tl;博士的答案是:你使用 LinearSeq
或 IndexedSeq
当你需要有一定的性能特征时,你使用更通用的Seq
当你不在乎差异时
这是 Seq
的伴随对象:
object Seq extends SeqFactory[Seq] {
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
def newBuilder[A]: Builder[A, Seq[A]] = immutable.Seq.newBuilder[A]
}
newBuilder[A]
方法是用于构建 Seq 的方法,您可以在 Seq.apply 方法中验证(在特征
GenericCompanion
上定义):
def apply[A](elems: A*): CC[A] = {
if (elems.isEmpty) empty[A]
else {
val b = newBuilder[A]
b ++= elems
b.result()
}
}
immutable.Seq.newBuilder[A]
是什么意思? build ?
immutable.Seq
伴生对象:
object Seq extends SeqFactory[Seq] {
// stuff
def newBuilder[A]: Builder[A, Seq[A]] = new mutable.ListBuffer
}
ListBuffer
!这是为什么?那是因为
mutable.ListBuffer
也恰好是
Builder[A, Seq[A]]
,即集合库用来构建新集合的类。
b.result()
ListBuffer.result()
的返回类型是什么? ?让我们在 ListBuffer 中看看:
// Implementation of abstract method in Builder
def result: List[A] = toList
Seq(1,2,3)
返回
List[Int]
在引擎盖下,但是
这里的重点是,如果你使用 Seq(),你不需要知道你有什么样的集合,因为你暗示更抽象的接口(interface)足以满足你的需要
关于scala - Scala 中的 Seq 和 IndexedSeq/LinearSeq 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091667/
在 Scala Collection documentation ,这个问题有一些线索: Trait Seq has two subtraits LinearSeq, and IndexedSeq.
match有什么原因吗?写反对 Seq在 IndexedSeq 上的工作方式会有所不同类型比它在 LinearSeq 上的方式类型?对我来说,无论输入类型如何,下面的代码似乎都应该做完全相同的事情。当
我是一名优秀的程序员,十分优秀!