Corrispondenza abbastanza frequente con le espressioni regolari. In Java:..Corrispondenza con un'espressione regolare in Scala
java.util.regex.Pattern.compile ("\ w +") matcher ("this_is") partite
Ouch. Scala ha molte alternative.
"\\w+".r.pattern.matcher("this_is").matches
"this_is".matches("\\w+")
"\\w+".r unapplySeq "this_is" isDefined
val R = "\\w+".r; "this_is" match { case R() => true; case _ => false}
Il primo è altrettanto pesante come il codice Java.
Il problema con il secondo è che non è possibile fornire un modello compilato ("this_is".matches("\\w+".r")
). (Questo sembra essere un anti-pattern poiché quasi ogni volta che c'è un metodo che prende una regex per compilare c'è un sovraccarico che prende una regex).
Il problema con il terzo è che abusa di unapplySeq
e quindi è criptico.
Il quarto è grande quando si decompongono parti di un'espressione regolare, ma è troppo pesante quando si desidera solo un risultato booleano.
Mi manca un modo semplice per verificare le corrispondenze con un'espressione regolare? C'è un motivo per cui String#matches(regex: Regex): Boolean
non è definito? In effetti, dove è definito String#matches(uncompiled: String): Boolean
?
Vale la pena notare che 'String # matches (string: String)' non è definito né dalla specifica 2.9 né da [StringLike] (http://www.scala-lang.org/api/current/index.html # scala.collection.immutable.StringLike) digita dalla libreria standard. È, infatti, un artefatto della definizione di [Strings in Java] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#matches (java.lang. Stringa)). – ig0774
Non capisco cosa intendi per troppo pesante nel primo esempio? Vuoi dire che il codice è troppo lungo, o vuoi dire che sta facendo troppo lavoro? –
troppo codice, il lavoro è esattamente quello che voglio – schmmd