funciones ejemplos scala

ejemplos - funciones en scala



Diferencias entre estas tres formas de definir una función en Scala (3)

Dentro de una clase, val se evalúa en la inicialización mientras que def se evalúa solo cuando, y cada vez , se llama a la función. En el siguiente código, verá que x se evalúa la primera vez que se usa el objeto, pero no de nuevo cuando se accede al miembro x. Por el contrario, y no se evalúa cuando se crea una instancia del objeto, sino que se evalúa cada vez que se accede al miembro.

class A(a: Int) { val x = { println("x is set to something"); a } def y = { println("y is set to something"); a } } // Prints: x is set to something val a = new A(1) // Prints: "1" println(a.x) // Prints: "1" println(a.x) // Prints: "y is set to something" and "1" println(a.y) // Prints: "y is set to something" and "1" println(a.y)

Dadas tres formas de expresar la misma función f(a) := a + 1 :

val f1 = (a:Int) => a + 1 def f2 = (a:Int) => a + 1 def f3:(Int => Int) = a => a + 1

¿Cómo difieren estas definiciones? El REPL no indica ninguna diferencia obvia:

scala> f1 res38: (Int) => Int = <function1> scala> f2 res39: (Int) => Int = <function1> scala> f3 res40: (Int) => Int = <function1>


Ejecutar una definición como def x = e no evaluará la expresión e . En cambio, e se evalúa cada vez que se usa x . Alternativamente, Scala ofrece una definición de valor val x = e, que sí evalúa la e del lado derecho como parte de la evaluación de la definición. Si x se usa posteriormente, se reemplaza inmediatamente por el valor pre-calculado de e , de modo que la expresión no necesita ser evaluada nuevamente.

Scala por ejemplo por Martin Odersky


f1 es una función que toma un número entero y devuelve un número entero.

f2 es un método con cero arity que devuelve una función que toma un entero y devuelve un entero. (Cuando escribe f2 en REPL más tarde, se convierte en una llamada al método f2 ).

f3 es lo mismo que f2 . No estás empleando inferencia tipo allí.