> val a:Seq[Integer] = Seq(3,4)
a: Seq[Integer] = List(3, 4)
如果Seq
只是一个特征,为什么编译器/ REPL接受它,并且它的行为与其他许多特征甚至抽象类一样?为什么scala将Seq转换为List?
> val a:Seq[Integer] = Seq(3,4)
a: Seq[Integer] = List(3, 4)
如果Seq
只是一个特征,为什么编译器/ REPL接受它,并且它的行为与其他许多特征甚至抽象类一样?为什么scala将Seq转换为List?
它不会转换任何东西。
Seq
是一个特质,你不能真正实例化它,只能将它混合到某个类中。
由于Seq
同伴对象的apply
方法必须返回一些具体的类实例(在Seq
特点是混合),它返回一个List
这似乎是一个合理的默认值。
一种情况这可能是有用的是,当你需要一些Seq
实例,但不关心执行和没有时间看的类型结构,找到一个合适的类实现Seq
。 Seq(3,4)
保证给你一些服从Seq
合同。
为Seq
默认的实现是一个List作为scaladoc这里提到:
它说
此对象提供的一组操作来创建SEQ值。 Seq的当前默认实现是List。
当调用Seq(3,4)
你实际调用Seq.apply(3,4)
它建立两个元素作为List
下面的序列。
到目前为止提供的答案没有回答它的基本原理的部分,以及这是否围绕大部分scala集合库。如果有一个好的,我会很乐意从中学习! – matanster 2014-09-28 14:09:05
增加了一些理由;) – soulcheck 2014-09-28 14:10:14
好的。 [评论最小长度填充] – matanster 2014-09-28 14:11:11