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

Scala和:: object

发布时间:2020-12-16 19:12:21 所属栏目:安全 来源:网络整理
导读:我一直潜入 scala,到目前为止我非常喜欢它.我正在开始模式匹配和案例类,以下让我有点难过.我知道它的作用,但我想知道究竟发生了什么 var list = List(2,3,4)1::list 如果到目前为止我的理解是正确的.然后::表示一个案例对象.如果是这样,我的问题是: 我怎么
我一直潜入 scala,到目前为止我非常喜欢它.我正在开始模式匹配和案例类,以下让我有点难过.我知道它的作用,但我想知道究竟发生了什么

var list = List(2,3,4)
1::list

如果到目前为止我的理解是正确的.然后::表示一个案例对象.如果是这样,我的问题是:

我怎么“把它”应用到1?而不是::是一个方法1.基本上可以有人拉这个语句1 ::列表分开,显示真正发生的事情(即什么方法被调用什么对象)

谢谢

解决方法

令人讨厌的是,Scala的一些最明显和最令人敬畏的功能在表面下方具有如此多的复杂性.所以,考虑这个简单的界限:

val (head :: tail): ::[Int] = 1 :: Nil

::ex出现的三个地方中的每一个都引用了不同的::,以及Scala中的不同机制.让我们按顺序浏览每一个.

头::尾巴

这里发生的是模式匹配,就像用case语句看到的一样.模式匹配可以出现在val赋值,左边的< - in for comprehensions和case语句中. 那么,这种特殊的模式匹配是如何发生的呢?好吧,只要模式的格式为b b,Scala就会将其转换为b(a,c),然后将其转换为对象b上的unapply或unapplySeq调用. 所以,:: in val(head :: tail)是指对象::(通过case类定义). :: :: [Int] 这是一个类型声明,因此:: [Int]是一个类型. ::本身是一个类,也是一个类型构造函数(因为它构造给定类型参数的类型 – :: [Int]是一种类型,:: [String]是另一种类型,等等).它也是List的子类,它只有两个子类:::和Nil的单例类. 这个声明是多余的,一般来说,一个人几乎不会使用::作为一个类型或类.我在这里展示它主要是为了完整性. 1 ::无 这里,::是一种方法.它是List的一种方法,因此,由于Nil是List而1不是,它必须属于Nil(或通过隐式转换可用). 这里注意的机制是以下结尾的方法:当在中缀运算符表示法中使用时,绑定到右边而不是左边.或者,换句话说,a :: b相当于b.::(a). 很少使用这种机制,我怀疑,主要是为了使传统的fp列表算法对于习惯于fp的程序员来说更为熟悉.它在Scala标准库的其他一些地方使用,并在其中使用. 例如,在Scala 2.8上,现在有:,它与::的目的相同,但是为所有Seq定义.它由以下内容镜像:,它附加元素,并且除了消除歧义之外没有任何其他目的,它被重载以连接字符串.

(编辑:李大同)

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

    推荐文章
      热点阅读