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

scala – 如何修改Nil列表?

发布时间:2020-12-16 19:11:59 所属栏目:安全 来源:网络整理
导读:你知道那个场景在再见和感谢所有鱼在亚瑟是如此神志不清的快乐他停止服务员并要求知道,“为什么这样的食物这么好?”我处于那种情况. Scala似乎正在做我想要的,但我不明白它是如何做到的.考虑以下: scala var v = Nil:List[String];v: List[String] = List(
你知道那个场景在再见和感谢所有鱼在亚瑟是如此神志不清的快乐他停止服务员并要求知道,“为什么这样的食物这么好?”我处于那种情况. Scala似乎正在做我想要的,但我不明白它是如何做到的.考虑以下:

scala> var v = Nil:List[String];
v: List[String] = List()

scala> v.length
res38: Int = 0

scala> v ::= "Hello"

scala> v.length
res39: Int = 1

scala> Nil.length
res40: Int = 0

这正是你所希望的,但它是如何发生的?

Nil是一个扩展List [Nothing]的对象,它是List [String]的子类型,所以赋值工作正常,但它是一个不可变列表,不是吗?所以我不应该追加它.但是我可以附加它,或者至少我可以附加到v,我认为它指向Nil. v被改变了,但是Nil不是.

那么,WTF? Scala是否有一些我不知道的聪明的复制修改语义? Nil真的是一个返回空列表的函数吗?更广泛地说,有什么方法可以让REPL回答这些问题吗?

解决方法

当斯卡拉看到

v ::= "Hello"

它首先检查v是否知道方法:: =.在这种情况下(类型列表),它不会,因此,因为该方法仅包含符号并以=符号结尾,它会尝试其他内容:

v = v.::("Hello")

顺便提一下,这是用中缀表示法写成“Hello”:: v.现在,由于v知道方法::,它起作用并返回一个新的List,然后按指示将其分配给v.

顺便说一句,它是前置,而不是附加.

(编辑:李大同)

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

    推荐文章
      热点阅读