gpt4 book ai didi

scala - 在Scala中的线对列表上使用模式匹配时发生编译器错误

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

我正在学习Scala模式匹配,并遇到以下问题:

假设我有一个整数列表,并使用模式匹配来匹配最后一个元素:

val list = 1 :: 2 :: 3 :: Nil

list match {
case xs :+ 3 => println("Matched")
case _ => println("Not matched")
}

在这种情况下,它可以正常工作,并打印“匹配”。

但是问题出在我使用配对列表代替时:
val list = ('a', 1) :: ('b', 2) :: ('c', 3) :: Nil
list match {
case xs :+ ('c', 3) => println("Matched")
case _ => println("Not mathed")
}

当我写这篇文章时,出现以下错误:
<console>:14: error: too many patterns for object :+ offering
(List[(Char, Int)], (Char, Int)): expected 2, found 3
case xs :+ ('c', 3) => println("Matched")
^
<console>:14: error: type mismatch;
found : Char('c')
required: (Char, Int)
case xs :+ ('c', 3) => println("Matched")

我在这里错过了什么吗?如果有正确的方法可以做到这一点?

scala版本是2.11.8。

谢谢

最佳答案

您需要用括号将附加的对括起来。方法:+接受一个参数。如果没有多余的括号,则假定使用两个参数。

list match {
case xs :+ (('c', 3)) => println("Matched")
case _ => println("Not mathed")
}

关于scala - 在Scala中的线对列表上使用模式匹配时发生编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476800/

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