Básicamente, me gustaría poder construir un extractor personalizado sin tener que almacenarlo en una variable antes de usarlo.¿Se pueden personalizar los extractores con parámetros en el cuerpo de una declaración de caso (o en cualquier otro lugar donde se use un extractor)?
Este no es un ejemplo real de cómo lo usaría, lo más probable es que se use en el caso de una expresión regular o algún otro patrón de cadena como construir, pero espero que explique lo que estoy buscando:
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}
Cuando acaba de hacer un solo extractor de costumbre, no tiene mucha diferencia, pero si alguien quisiera construir una gran lista de extractores para una declaración de caso, podría hacer las cosas más difíciles de leer por la separación de la totalidad de la extractores de su uso.
espero que la respuesta es no, no puedes hacer esto, pero pensé que le pediría alrededor primero: D
¿Y usted, um, * try * it? –
hice probarlo, he recibido un error de sintaxis: Scala> val {someExtractorBuilder (verdadero)} (resultado) = "prueba": 1: Error: inicio ilegal de patrón simple val {someExtractorBuilder (verdadero)} (resultado) = "prueba" ^ –
¿Qué estás tratando de hacer en última instancia? Probablemente haya una mejor manera de hacerlo que hacer muchos extractores. –