Grundsätzlich möchte ich in der Lage sein, einen benutzerdefinierten Extraktor zu erstellen, ohne ihn vor der Verwendung in einer Variablen speichern zu müssen.Können Extraktoren mit Parametern im Körper einer case-Anweisung (oder anderswo, wo ein Extraktor verwendet würde) angepasst werden?
Dies ist kein echtes Beispiel, wie ich es verwenden würde, es würde eher im Falle eines regulären Ausdrucks oder eines anderen String-Patterns wie Konstrukt verwendet werden, aber hoffentlich erklärt es, wonach ich suche:
def someExtractorBuilder(arg:Boolean) = new {
def unapply(s:String):Option[String] = if(arg) Some(s) else None
}
//I would like to be able to use something like this
val {someExtractorBuilder(true)}(result) = "test"
"test" match {case {someExtractorBuilder(true)}(result) => result }
//instead I would have to do this:
val customExtractor = someExtractorBuilder(true)
val customExtractor(result) = "test"
"test" match {case customExtractor(result) => result}
wenn nur einen einzigen benutzerdefinierten Extraktor tut es nicht viel Unterschied machen, aber wenn Sie eine große Liste von Extraktoren für eine Case-Anweisung erstellt wird, könnte es Dinge schwieriger machen, indem zu lesen alle die Trenn Extraktoren aus ihrer Verwendung.
Ich erwarte, dass die Antwort nein ist, dass Sie dies nicht tun können, aber ich dachte, ich würde fragen, um erste: D
Und hast du, äh, * versuchst du es? –
Ich habe versucht, es erhielt ich einen Syntaxfehler: scala> val {someExtractorBuilder (true)} (Ergebnis) = "test": 1: Fehler: illegal Anfang einfacher Muster val {someExtractorBuilder (true)} (Ergebnis) = "Test" ^ –
Was versuchen Sie letztendlich? Es gibt wahrscheinlich einen besseren Weg, um viele Extraktoren zu machen. –