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í.