Estoy tratando de hacer algo que no estoy seguro si el sistema de tipos de Scala me permitirá hacerlo.Crear cierre desde genérico en Scala
Básicamente quiero crear un cierre de una definición genérica y volver que el cierre, durante la ejecución de una función interna del mismo tipo.
Por ejemplo:
val f = async[(str:String, i:Int, b:BigInt) => Unit]({ (String, Int, BigInt) =>
// Code here...
})
// 'f' would have a type of (String, Int, BigInt) => Unit and would wrap the passed anonymous function
ejemplo teórico de una definición:
def async[T](
shell: Shell,
success: T,
failure: (Throwable) => Unit): T = {
new T {
val display = shell.getDisplay()
display.asyncExec(new Runnable() {
def run(): Unit = {
try {
success(_)
} catch {
case e:Throwable =>
failure(e)
}
}
})
}
}
Esto entonces me permite tener un sistema simple de crear devoluciones de llamada asincrónicas para SWT, manteniendo SWT de mi lógica de negocios.
posible duplicado de [Scala genéricos: ¿por qué no puedo crear un objeto parametrizado dentro de la clase genérica?] (Http://stackoverflow.com/questions/5336648/scala-generics-why-i-cant-create-parametrised- object-inside-generic-class) –
No creo que sea un 100% duplicado, porque incluso si creara una clase de tipo T con un método apply, igual tendría que tener en cuenta los parámetros proporcionados por T. Sin embargo, , el borrado de tipo puede hacer que este problema en particular sea imposible de resolver. – Hakkar