Das mag offensichtlich aussehen, aber ich konnte die No match available error
nicht erklären. Im Folgenden finden Sie eine Definition einer einfachen Matching-Funktion, die ich verwende.Wie benutze ich scala.util.matching.Regex richtig?
Die gleichen Anweisungen innerhalb der Funktion werden ohne Problem ausgeführt, der Aufruf der Funktion löst jedoch den Fehler aus. Kannst du mir helfen, den Fehler zu lokalisieren?
import scala.util.matching.Regex
def regexParsing(inputRecord:String, inputRegex:String, listOfFields:Seq[String], fieldsToRemove:Seq[String]): scala.collection.Map[String,Any] = {
val logPattern = new Regex(inputRegex, listOfFields:_*)
val result = logPattern.findAllIn(inputRecord)
val resultMap = result.groupNames.map(a => Map(a.toString -> result.group(a))).reduce(_++_)
return resultMap
}
val inputRecord = """s2222f"""
val inputRegex = """(.*)"""
val listOfFields = Seq("field")
val fieldsToRemove = Seq("field1", "field2")
// working
val logPattern = new Regex(inputRegex, listOfFields:_*)
val result = logPattern.findAllIn(inputRecord)
val resultMap = result.groupNames.map(a => Map(a.toString -> result.group(a))).reduce(_++_)
// not working
regexParsing(inputRecord, inputRegex, listOfFields, fieldsToRemove)
Ich bekomme den gleichen Fehler in beiden Code-Blöcken (in oder aus der Methode) - sehr seltsam. Sieht aus wie ein Problem beim Zugriff auf 'result.group (..)', bevor der Match-Iterator irgendwie materialisiert wird - wenn Sie etwas Dummes wie 'println (result)' hinzufügen, bevor Sie 'resultMap' erstellen, funktioniert das (!). –
@TzachZohar Ja, es gibt einen alten Mailinglisten-Thread, bei dem jemand bemerkt hat, dass er in REPL arbeitet, weil REPL toString aufruft. –