¿Es posible especificar el tipo de retorno de una función anónima en Scala?
-
21-09-2019 - |
Pregunta
Sé que puedes crear una función anónima y hacer que el compilador infiera su tipo de retorno:
val x = () => { System.currentTimeMillis }
Solo por motivos de escritura estática, ¿es posible especificar también su tipo de retorno?Creo que aclararía mucho las cosas.
Solución
En mi opinión, si usted está tratando de hacer las cosas más claras que es mejor para documentar la expectativa en el identificador x mediante la adición de una anotación de tipo no más que el resultado de la función.
val x: () => Long = () => System.currentTimeMillis
A continuación, el compilador se asegurará de que la función en el lado derecho se encuentra con esa expectativa.
Otros consejos
val x = () => { System.currentTimeMillis } : Long
Fabian dio el camino sencillo, pero algunas otras maneras si te gusta la microgestión de azúcar incluyen:
val x = new (() => Long) {
def apply() = System.currentTimeMillis
}
o
val x = new Function0[Long] {
def apply() = System.currentTimeMillis
}
o incluso
val x = new {
def apply(): Long = System.currentTimeMillis
}
ya que en la mayoría de situaciones que no hace ninguna diferencia si se desciende de la función, solamente si tiene un aplique.