gpt4 book ai didi

scala - Scala 中 case 语句中的 cons 运算符

转载 作者:行者123 更新时间:2023-12-04 02:59:45 25 4
gpt4 key购买 nike

所以我读到了右结合运算符,例如 Scala 中的 cons 运算符。我想知道为什么他们在案例陈述中工作。您似乎可以在此处使用 cons 语句进行模式匹配?

def findKth1[A](k:Int, l:List[A]):A = (k, l) match {
case (0, h::_) => h
case(k, _::tail) if k > 0 => findKth1(k - 1, tail)
case _ => throw new NoSuchElementException
}

findKth1(2, List(3,4,5,6))

res1: Int = 5

占位符在这里做什么?我只见过这样的函数中使用的占位符:<SomeList>.map(_.doThing) .是同一个概念吗?

::的唯一区别和 :::是那个:::用于 2 个列表,对吗?

最佳答案

tl;dr 它不是模式匹配运算符,它是模式匹配一​​个名为 ::

的案例类

有几件事同时发生。首先,可能有点困惑,因为 :: 是 List:

上的一个方法
val x: List[Int] = 1 :: 2 :: 3 :: Nil

但是还有一个case class::,根据文档是:

A non empty list characterized by a head and a tail.

More info here

Scala 的案例类自动带有提取器方法 (unapply),它允许模式匹配,如 case User(name, age) => ...

您还可以在中缀 位置使用案例类名称(尽管您不应该这样做,除非案例类像运算符一样使用,例如在本例中) .所以 case head::tail => ...case::(head, tail) => ... 相同。 More info here

模式匹配时,您可以使用 _ 表示那里会有一个值,但您不关心它,所以您没有为其提供名称。

所以你提供的三种情况大致是:

  • 第一个值为 0 的元组,第二个值为一个列表,其头部称为 h,尾部我们将忽略。
  • 一个元组,其中包含一些称为 k 的整数,以及一个包含我们不关心的头部和尾部(我们将称之为 tail)的列表.此外,k 必须大于 0
  • 任何其他,然后抛出 NoSuchElementException

关于scala - Scala 中 case 语句中的 cons 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50240103/

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