[英]Last element in Scala List?
在Scala中,List实现为链接列表。 它有2个部分,头部和尾部。 List中的最后一个单元格包含Nil。
Scala中的Nil本身就是一个单例,并扩展了List [Nothing], 如此处所述
由于Nil是单例,它是否意味着Scala中所有List实例的end元素具有相同的对象。
事实上,结束标记始终是单个Nil,即同一个对象,最后一个元素就是前一个。
scala> val a = 1 :: 2 :: Nil
a: List[Int] = List(1, 2)
scala> a.last
res10: Int = 2
你可能会争论这个术语,但编码员在这方面经常是实证主义者,而事实就是代码所说的。
是的,所有列表都以名为Nil的空列表结束。
你可以通过尝试在最后创建一个没有Nil的列表来看到这一点。
val a = 1 :: 2
//失败
val a = 1 :: Nil
//成功
val a = scala.collection.immutable.::(1, Nil)
成功
最后一种情况要求的情况下类构造函数::
延伸List
,因此,创建一个List
。 案例类的代码::
是......
final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] {
override def tail : List[B] = tl
override def isEmpty: Boolean = false
}
操作::
在List对象中定义,该对象调用case类::
在执行类似1 :: Nil
时为您创建一个列表。
如下所示:
def ::[B >: A] (x: B): List[B] =
new scala.collection.immutable.::(x, this)
您还可以看到List
上的map
操作代码如何遍历List,直到达到Nil。
从List
类中的map
函数获取的片段
while (rest ne Nil) {
val nx = new ::(f(rest.head), Nil)
t.tl = nx
t = nx
rest = rest.tail
}
(ne代表不相等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.