当我做4 :: Nil时,我得到List(4)。我可以理解它,因为当一个空列表前面加上4时它给出了单个元素列表。但是当我做Nil :: Nil时,我得到List的单个空列表,即List(List()),为什么它会这样?
由于
答案 0 :(得分:4)
在Scala中,Nil
代表一个空列表或List()
。 ::
运算符接受一个元素并将其添加到列表的开头。它没有连接两个列表。例如,1::List(2,3,4)
返回List(1,2,3,4)
。
因此当您执行4::Nil
或4::List()
时,它会返回List(4)
。类似地,Nil::Nil
或List()::List()
获取空列表并将其添加到另一个空列表的开头。所以你得到List(List())
。
但是如果你使用连接运算符:::
,即。Nil:::Nil
,它会连接两个空列表并返回另一个空列表List()
。
答案 1 :(得分:2)
右侧Nil
是空列表,与之前一样,但该列表的类型由前面的元素设置。在这种情况下,这是左侧Nil
,因此被视为前(右)列表前面的新元素。由于Nil
的类型为List[_]
(对于某些人 - 此处未确定 - 类型为_
),因此右侧Nil
所代表的列表类型将为{{ 1}} - 列表清单。
答案 2 :(得分:0)
理解这一点的另一种方法是使用它的工作原理:
List(1, 2, 3, 4) match {
case firstElem :: tailOfList => println(tailOfList) // List(2, 3, 4)
case _ => // do something else
}