繁体   English   中英

Scala列表中的最后一个元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM