为什么在 scala 中创建 List 时需要 Nil ? [复制]

2024-02-10

我在清单上有一个基本问题

当我尝试使用 cons 运算符创建列表时,出现以下错误

scala> val someList = 1::2
<console>:10: error: value :: is not a member of Int
   val someList = 1::2
                   ^

但如果你看下面,只要我在末尾添加 Nil ,它就可以工作了。

    scala> val someList = 1::2::Nil
    someList: List[Int] = List(1, 2)

我想知道为什么当我们创建列表时,最后至少需要一次 Nil

Nil 是一种数据类型吗?或者空元素?


正是因为这个原因。

value :: 不是 Int 的成员

在 Scala 中,运算符实际上是对象上的函数。在这种情况下,::是一个函数Nil对象,即实际上是一个空列表对象.

scala> Nil
res0: scala.collection.immutable.Nil.type = List()

当你这样做时1::2,Scala 寻找名为的函数:: on 2但它没有发现这一点。这就是为什么它会因该错误而失败。


Note:在 Scala 中,如果运算符的最后一个字符不是冒号,则对第一个操作数调用该运算符。例如,1 + 2基本上是1.+(2)。但是,如果最后一个字符是冒号,则在右侧操作数上调用运算符。所以在这种情况下,1 :: Nil实际上是Nil.::(1)。自从,::返回另一个列表对象,你可以链接它,就像这样1 :: 2 :: Nil实际上是,Nil.::(2).::(1).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 scala 中创建 List 时需要 Nil ? [复制] 的相关文章

随机推荐