def foo(x:Int, f:Unit=>Int) = println(f())
foo(2, {Unit => 3+4}
//case1
def loop:Int = 7
foo(2, loop) //does not compile
changing loop to
//case 2
def loop():Int = 7
foo(2, loop) // does not compile
changing loop to
//case 3
def loop(x:Unit): Int = 7 //changing according to Don's Comments
foo(2,loop) // compiles and works fine
should'nt case 1 and case 2 also work? ¿Por qué no están trabajando?Funciones sin argumentos, con unidad como argumento en scala
definir como foo
def foo(x:Int, y:()=>Int)
continuación, caso 2 funciona pero no el caso 1.
Arent todos ellos supone que trabajan, la definición de las funciones de cualquier manera.
// también creo que() => Int in foo es un mal estilo, y: => Int no funciona, ¿comentarios?
def define los métodos (que no son de primera clase), no las funciones (que * son * de primera clase). La aplicación parcial eleva los métodos a las funciones cuando los necesita. –
Puede por favor elaborar ... No lo conseguí. ¿Quiso decir que la def no se puede pasar? es decir, ¿el "bucle" anterior no se puede pasar a otras funciones? – scout
Correcto. Cuando decimos "primera clase" nos referimos al mismo estado que cualquier otro valor, como un Int, una Cadena o una instancia de alguna clase definida por el usuario. Los métodos no se pueden tratar de esta manera (solo se pueden llamar). Las funciones, por otro lado (que son instancias de (subclases de) FunctionN (N es el número de argumentos)), son entidades de primera clase por la razón obvia de que son instancias de una clase. –