我正在尝试进行符合预期的模式匹配,但是IntelliJ IDE显示以下突出显示错误
Expected: PartialFunction[Regex, NotInferedB], actual: Nothing => Boolean. Cannot resolve method x.unapply Cannot resolve symbol x
代码:
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
该错误显示在收集部分中。谁能指导我,这可能是导致IntelliJ中突出显示错误的问题
答案 0 :(得分:1)
获得PartialFunction[Regex, NotInferedB], actual: Nothing => Boolean
编译时间的原因是因为您提供了lambda函数,而collect
函数却具有PartialFunction。
我不知道您希望通过代码片段实现什么,但是下面的内容可以解决您的问题。
if (keys("XYZ").collect { case x => true }.contains(true)) println("yes") else println("no")
答案 1 :(得分:0)
if (keys("XYZ").collect{case x: Regex => desc match{ case x(_) => true}
}.contains(true)) println("yes") else println("no")
但是有一种更好的方式编写它:
if(keys("XYZ").exists { x => x.findFirstMatchIn(desc) match {
case Some(_) => true
case None => false
}
}) println("yes") else println("no")
答案 2 :(得分:0)
尝试一下:
if (keys("XYZ").exists(_.findFirstIn(desc).isDefined)) println("yes") else println("no")