加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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)时,您将在List‘s companion object上调用apply方法.

scala> List[Int](5)
res2: List[Int] = List(5)

List没有可以调用的构造函数,因为List是抽象的. List是抽象的,因为它是一个缺点列表,所以List实例可以是cons和nil(或者,当Scala库调用它们时,::和Nil).

但是如果你真的想要,你可以调用:: constructor.

scala> new ::('a',new ::('b',Nil))
res3: scala.collection.immutable.::[Char] = List(a,b)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读