执行模式匹配时Scala类型不匹配
我正在尝试进行模式匹配,但IntelliJ IDE显示以下突出显示错误 代码:执行模式匹配时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中的突出显示错误吗?您获得部分函数[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")