Die match
benötigt mindestens eine Erfassungsgruppe im Muster, weil Sie case(_)
verwenden. Dies liegt daran, dass "Match-Case" unapplySeq(target: Any): Option[List[String]]
verwendet, die die Capture-Gruppenwerte zurückgibt, und Sie benötigen 1 erfassten Wert, um mit _
vorhanden zu sein. Mit _ *
ignorieren Sie diese Anforderung. Siehe Scala regex reference:
nur Um zu überprüfen, ob die Regex übereinstimmt, alle Gruppen zu ignorieren, verwenden Sie eine Sequenz Wildcard:
"2004-01-20" match { case date(_*) => "It's a date!" }
Ihre p2
eine Erfassungsgruppe enthält, damit die letzte Zeile gibt true zurück.
Ihre p1
enthält keine Erfassungsgruppe, daher schlägt die erste match
fehl. Die zweite Möglichkeit besteht nicht seit Sie diese Anforderung mit *
deaktiviert haben.
Als Alternative können Sie case p1()
mit Ihrem ersten Zeile verwenden (die _
die obligatorische erste Capture-Gruppe darstellt, wird hier entfernt), und es wird auch funktionieren:
"scala" match {case p1() => true case _ => false }) // return true
Sehen Sie diese IDEONE demo
'match' benötigt eine Fanggruppe im Muster. Mit '_ *' ignorieren Sie diese Anforderung. –