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

“:”和“::”之间的Scala差异

发布时间:2020-12-16 10:06:41 所属栏目:安全 来源:网络整理
导读:我正在阅读 scala书,他们在序列和列表上进行模式匹配时使用两种不同类型的cons运算符 +::: 通常大多数函数式语言使用:: as cons.我不知道为什么scala有2种不同类型的运算符. 我也搜索了这个…但没有找到任何有意义的东西. 谢谢你的回答.我从中理解:是一个通
我正在阅读 scala书,他们在序列和列表上进行模式匹配时使用两种不同类型的cons运算符

+:

::

通常大多数函数式语言使用:: as cons.我不知道为什么scala有2种不同类型的运算符.

我也搜索了这个…但没有找到任何有意义的东西.

谢谢你的回答.我从中理解:是一个通用运算符,::是特定于列表.但我或许是一个后续问题,为什么scala会使用两个运算符.为什么不用一个::

解决方法

final case class ::[B](override val head: B,private[scala] var tl: List[B]) extends List[B] {
  override def tail : List[B] = tl
  override def isEmpty: Boolean = false
}

override def +:[B >: A,That](elem: B)(implicit bf: CanBuildFrom[List[A],B,That]): That = bf match {
  case _: List.GenericCanBuildFrom[_] => (elem :: this).asInstanceOf[That]
  case _ => super.+:(elem)(bf)
}

这使得它变得清晰 – :: take List并生成List,而:是更通用的形式,可以构建其他集合 – 如Vector或ArrayBuffer.

(编辑:李大同)

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

    推荐文章
      热点阅读