Scala中Array和List初始化之间的区别
发布时间:2020-12-16 09:54:05 所属栏目:安全 来源:网络整理
导读:就Array而言,如果没有给出初始值,则需要new,以及显式类型: val ary = new Array[Int](5) 但对于List: val list1 = List[Int]() // "new" is not needed here. 当我添加新内容时,会发生错误: scala val list = new List[Int]()console:7: error: class Lis
就Array而言,如果没有给出初始值,则需要new,以及显式类型:
val ary = new Array[Int](5) 但对于List: val list1 = List[Int]() // "new" is not needed here. 当我添加新内容时,会发生错误: scala> val list = new List[Int]() <console>:7: error: class List is abstract; cannot be instantiated val list = new List[Int]() 为什么会这样? 解决方法
使用new始终意味着您正在调用构造函数.
似乎对类和伴随对象之间的区别存在一些混淆. scala> new Array[Int](5) res0: Array[Int] = Array(0,0) scala> Array[Int](5) res1: Array[Int] = Array(5) 在第一个表达式中,Array引用了类型,并且您正在调用构造函数. 第二个表达式desugars到Array.apply [Int](5),而Array引用了伴随对象. 你不能写新的List,因为错误和the doc说,List是抽象的. 当您编写List(5)时,您将在 scala> List[Int](5) res2: List[Int] = List(5)
但是如果你真的想要,你可以调用:: constructor. scala> new ::('a',new ::('b',Nil)) res3: scala.collection.immutable.::[Char] = List(a,b) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |