gpt4 book ai didi

Scala "match"帮助

转载 作者:行者123 更新时间:2023-12-04 01:22:33 27 4
gpt4 key购买 nike

我正在研究一些 Scala 代码,发现这种方法让我感到困惑。在匹配语句中,sublist@ 是什么?构造?它包含什么样的值(value)?当我打印它时,它与 tail 没有区别,但如果我用尾部替换它,该函数返回 diff 结果。有人可以解释它是什么并指出我正确的资源来理解它吗? (我知道我可以在谷歌搜索,但不知道该找什么……)

def flatMapSublists[A, B](ls: List[A])(f: (List[A]) => List[B]): List[B] =
ls match {
case Nil => Nil
case sublist@(_ :: tail) => f(sublist) ::: flatMapSublists(tail)(f)
}

最佳答案

我会称之为“吃你的蛋糕,也有它的运营商”。在模式匹配的任何级别,您都可以为部件命名(在@ 之前)并进一步对其进行解构(在@ 之后)。例如,假设你想匹配一个包含 3 个元素的 List,你需要第二个元素,但你想记录整个列表:

something match {
case list@List(_,elem,_) => log("matching:" + list); elem
case _ => error("not found")
}

没有这个功能,你必须写一些类似的东西
something match {
case List(a,elem,b) => log("matching:" + List(a,elem,b)); elem
case _ => error("not found")
}

如您所见,我们需要命名第一个和第三个元素,只是因为我们需要它们来获取右侧具有相同结构的列表,即样板。如果您可以为整个事物命名( list ),并且在结构中更深的部分( elem ),则在右侧需要两者时,会更容易和更清晰。

关于Scala "match"帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513380/

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