我正在尝试了解List模式匹配的scala实现和 有疑问如何在List.scala的幕后实现第一个case语句(::将列表按1st,2nd和rest进行拆分)
list match{
case h1 :: h2 :: rest => println(h2)
case _ =>
}
我试图通过将其与Option Monad进行比较来理解,以下是我对Option case模式匹配如何工作的理解:
当我在Option.scala
中调用下面的Option时包装了一个对象时,它为我提供了Some或None
def apply[A](x: A): Option[A] = if (x == null) None else Some(x)
然后,当我在Option上进行模式匹配时,以下条件之一将被匹配,并且我可以调用相同的方法
final case class Some[+A](x: A) extends Option[A] {
def isEmpty = false
def get = x
}
case object None extends Option[Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("None.get")
}
当我在List.scala中寻找类似的实现时,我可以找到Nil({case object Nil extends List[Nothing]
)的案例实现,它将为case Nil
模式匹配进行调用
但我试图了解语句case h1 :: h2 :: rest
与List.scala案例实现的匹配方式
感谢您的浏览,如果我的问题缺少所需的信息,请添加评论。