就Array没有给出初始值时而言,new是必需的,还有一个显式类型:
val ary = new Array[Int](5)
Run Code Online (Sandbox Code Playgroud)
但对于List:
val list1 = List[Int]() // "new" is not needed here.
Run Code Online (Sandbox Code Playgroud)
添加时new,会发生错误:
scala> val list = new List[Int]()
<console>:7: error: class List is abstract; cannot be instantiated
val list = new List[Int]()
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
Chr*_*tin 10
使用newalways意味着你正在调用构造函数.
似乎对类和伴随对象之间的区别存在一些混淆.
scala> new Array[Int](5)
res0: Array[Int] = Array(0, 0, 0, 0, 0)
scala> Array[Int](5)
res1: Array[Int] = Array(5)
Run Code Online (Sandbox Code Playgroud)
在第一个表达式中,Array引用类型,并且您正在调用构造函数.
第二个表达式是desugars Array.apply[Int](5),并Array指向伴随对象.
你不能写new List,因为错误和文档说的List是抽象的.
当你写作时List(5),你在同伴对象apply上调用方法.List
scala> List[Int](5)
res2: List[Int] = List(5)
Run Code Online (Sandbox Code Playgroud)
List没有你可以调用的构造函数,因为它List是抽象的.List是抽象的,因为它是一个利弊清单,这样一个List实例可以是cons和nil(或如Scala库调用它们,::和Nil).
但是::如果你真的想要,你可以调用构造函数.
scala> new ::('a', new ::('b', Nil))
res3: scala.collection.immutable.::[Char] = List(a, b)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |