Ein weiterer Ansatz, der nicht auf reguläre Ausdrücke oder interpolaters abhängt:
implicit class StringExtensions(val s: String) extends AnyVal {
def insensitive = new {
def unapply(other: String) = s.equalsIgnoreCase(other)
}
}
val test1 = "Bye".insensitive
val test2 = "HELLo".insensitive
"Hello" match {
case test1() => println("bad!")
case test2() => println("sweet!")
case _ => println("fail!")
}
Hier ist eine andere Weg mit Interpolatoren, aber keine Regex:
implicit class StringInterpolations(sc: StringContext) {
def ci = new {
def unapply(other: String) = sc.parts.mkString.equalsIgnoreCase(other)
}
}
"Hello" match {
case ci"Bye" => println("bad!")
case ci"HELLO" => println("sweet!")
case _ => println("fail!")
}
Die oben kann auch auf Mustererkennung innerhalb Fallklassen, zB verwendet werden:
case class Dog(name: String)
val fido = Dog("FIDO")
fido match {
case Dog(ci"fido") => "woof"
case _ => "meow :("
}
Anruf toLowerCase auf 'str' diese Vervielfältigung wird vermieden (obviosly die alle Fall Optionen müssen dann Kleinbuchstaben sein). –
Case-Optionen sind Konstanten, die ich nicht ändern kann – ZhekaKozlov
@orionll und Sie können ganze Spielanweisung nicht umschreiben, richtig? (z. B. Ersetzen von einfachen Zeichenfolgen durch die Regexp-Matcher) –