执行模式匹配时Scala类型不匹配

执行模式匹配时Scala类型不匹配,scala,pattern-matching,Scala,Pattern Matching,我正在尝试进行模式匹配,但IntelliJ IDE显示以下突出显示错误 代码: 错误显示在收集部分。有谁能告诉我是什么问题导致IntelliJ中的突出显示错误吗?您获得部分函数[Regex,not推断b]的原因是:Nothing=>Boolean编译时,因为您提供的是lambda函数,而collect函数接受部分函数 我不知道您想用这段代码实现什么,但下面将解决您的问题 if (keys("XYZ").collect { case x => true }.contains(true)) p

我正在尝试进行模式匹配,但IntelliJ IDE显示以下突出显示错误

代码:


错误显示在收集部分。有谁能告诉我是什么问题导致IntelliJ中的突出显示错误吗?您获得部分函数[Regex,not推断b]的原因是:Nothing=>Boolean编译时,因为您提供的是lambda函数,而
collect
函数接受部分函数

我不知道您想用这段代码实现什么,但下面将解决您的问题

if (keys("XYZ").collect { case x => true }.contains(true)) println("yes") else println("no")
  • 这是正确的书写方式,最后一个表达式是:
if(key(“XYZ”).collect{case x:Regex=>desc match{case x()=>true}
}.contains(true))println(“yes”)else println(“no”)

  • 但是有一种更好的方法来写它:

    if(key(“XYZ”).exists{x=>x.findFirstMatchIn(desc)匹配{
    案例部分()=>正确
    case None=>false
    }
    })println(“是”)否则println(“否”)

试试这个:

如果(键(“XYZ”)存在(u.findFirstIn(desc.isDefined))println(“是”)或println(“否”)

 scala>  val keys = Map(
         |          "XYZ" -> List("(?i)(.*SANDWICH.*)",
         |            "(?i)(.*BURGER.*)").map(x => x.r)
         |        )

    keys: scala.collection.immutable.Map[String,List[scala.util.matching.Regex]] = Map(XYZ -> List((?i)(.*SANDWICH.*), (?i)(.*BURGER.*)))

    scala> val desc = "I DON't LIKE SANDWICH "
    desc: String = "I DON't LIKE SANDWICH "

    scala> if (keys("XYZ").collect{x => desc match{ case x(key) => true}}.contains(true)) println("yes") else println("no")
    yes
if (keys("XYZ").collect { case x => true }.contains(true)) println("yes") else println("no")