2010-01-18 13 views

Respuesta

27

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.

+0

No estoy seguro a qué se refiere con * que la función en el lado izquierdo cumpla con esa expectativa *, establecer un tipo para el bloque de resultados también asegura que el tipo es correcto, p. 'val x =() => {System.currentTimeMillis}: String' no compila. ¿O quieres decir algo más? –

+0

La respuesta de Geoff tiene la ventaja de que obtiene el tipo completo por adelantado. Si tiene una definición de función larga (varias líneas), es más rápido entender qué está sucediendo si el tipo está al principio. La respuesta de Fabian tiene la ventaja de ser menos repetitiva (especialmente buena para definiciones cortas (de una línea), y más rápida de entender si puedes asimilar todo de una sola mirada). –

+0

Oh, ahora veo el punto de Geoff, su definición de tipo contiene el tipo de entrada, que aquí es '()', y que se comprueba cuando la función '() => System.currentTimeMillis' se asigna a' x'. –

37
val x =() => { System.currentTimeMillis } : Long 
+0

Esto resolvió mi problema. Esto hizo mucho menos detallado que usar el enfoque de Función #. –

+0

parece que 'val x =() => Long = {blah}' sería una sintaxis más intuitiva. ¡Gracias por la respuesta! – wbarksdale

9

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 las situaciones, no hace diferencia si desciende de la Función, solo si tiene una aplicación.

Cuestiones relacionadas