gpt4 book ai didi

scala - 如何修改 Nil 列表?

转载 作者:行者123 更新时间:2023-12-04 13:04:52 25 4
gpt4 key购买 nike

你知道再见和感谢所有的鱼中的那个场景,亚瑟非常高兴,他拦住了一名服务员,并要求知道,“为什么这种食物这么好吃?”我就是这种情况。 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 回答这些问题?

最佳答案

当 Scala 看到

v ::= "Hello"

它首先检查是否 v知道方法 ::= .在这种情况下(类型 List),它不会,因为该方法仅由符号组成并以 = 结尾签名,它尝试别的东西:
v = v.::("Hello")

顺便说一句,写成 "Hello" :: v中缀表示法。现在,由于 v知道方法 :: ,这有效并返回一个新的 List ,然后分配给 v如..所示。

顺便说一下,它是前置的,而不是附加的。

关于scala - 如何修改 Nil 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com