gpt4 book ai didi

Scala 模式匹配混淆

转载 作者:行者123 更新时间:2023-12-04 23:09:44 25 4
gpt4 key购买 nike

我开始学习 Scala,但我不太了解模式匹配的一些行为。谁能向我解释为什么第一种情况有效,而第二种情况无效?

1

def getFirstElement(list: List[Int]) : Int = list match {
case h::tail => h
case _ => -1
}

Scala> getFirstElement(List(1,2,3,4))
res: Int = 1

Scala> 1 :: List(1,2)
res: List[Int] = List(1, 1, 2)

2

def getSumofFirstTwoElement(list: List[Int]): Int = list match {
case List(a: Int, b: Int)++tail => a + b
case _ => -1
}

<console>:11: error: not found: value ++

Scala> List(1,2) ++ List(3,4,5)
res: List[Int] = List(1, 2, 3, 4, 5)

最佳答案

原因是 ++ 类型的对象上没有 unapply 方法。 :: 之所以起作用,是因为它在幕后真的是:

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
}

Source

这导致了在 Scala 中如何实现模式匹配。它使用 extractors (或 here ),它们基本上是包含 unapply 方法的对象,默认情况下由案例类提供。

关于Scala 模式匹配混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com