[Function] Diferencia entre método y función en Scala


Answers

Una gran diferencia práctica entre un método y una función es lo que significa el return . solo devuelve retornos de un método. Por ejemplo:

scala> val f = () => { return "test" }
<console>:4: error: return outside method definition
       val f = () => { return "test" }
                       ^

Al regresar de una función definida en un método, se obtiene una devolución no local:

scala> def f: String = {                 
     |    val g = () => { return "test" }
     | g()                               
     | "not this"
     | }
f: String

scala> f
res4: String = test

Mientras que regresar de un método local solo regresa de ese método.

scala> def f2: String = {         
     | def g(): String = { return "test" }
     | g()
     | "is this"
     | }
f2: String

scala> f2
res5: String = is this
Question

Leí Scala Functions (parte de Another tour of Scala ). En esa publicación, declaró:

Los métodos y las funciones no son lo mismo

Pero él no explicó nada al respecto. ¿Qué estaba tratando de decir?




Deje que diga que tiene una lista

scala> val x =List.range(10,20)
x: List[Int] = List(10, 11, 12, 13, 14, 15, 16, 17, 18, 19)

Definir un método

scala> def m1(i:Int)=i+2
m1: (i: Int)Int

Definir una función

scala> (i:Int)=>i+2
res0: Int => Int = <function1>

scala> x.map((x)=>x+2)
res2: List[Int] = List(12, 13, 14, 15, 16, 17, 18, 19, 20, 21)

Método de aceptación de argumento

scala> m1(2)
res3: Int = 4

Definición de función con val

scala> val p =(i:Int)=>i+2
p: Int => Int = <function1>

Argumento para funcionar es opcional

 scala> p(2)
    res4: Int = 4

scala> p
res5: Int => Int = <function1>

La discusión sobre el Método es Obligatoria

scala> m1
<console>:9: error: missing arguments for method m1;
follow this method with `_' if you want to treat it as a partially applied function

Consulte el siguiente Tutorial que explica el paso de otras diferencias con ejemplos como otros ejemplos de diferencias con el método Vs Función, Uso de funciones como variables, creación de funciones que devuelven funciones




Aquí hay un buen artículo del cual se toman la mayoría de mis descripciones. Solo una breve comparación de Funciones y Métodos con respecto a mi comprensión. Espero eso ayude:

Funciones : Básicamente son un objeto. Más precisamente, las funciones son objetos con un método de aplicación; Por lo tanto, son un poco más lentos que los métodos debido a su sobrecarga. Es similar a los métodos estáticos en el sentido de que son independientes de un objeto que se invocará. Un simple ejemplo de una función es como el siguiente:

val f1 = (x: Int) => x + x
f1(2)  // 4

La línea de arriba no es otra cosa que asignar un objeto a otro como object1 = object2. En realidad, el objeto2 en nuestro ejemplo es una función anónima y el lado izquierdo recibe el tipo de objeto debido a eso. Por lo tanto, ahora f1 es un objeto (Función). La función anónima es en realidad una instancia de la Función 1 [Int, Int] que significa una función con 1 parámetro de tipo Int y valor de retorno de tipo Int. Llamar a f1 sin los argumentos nos dará la firma de la función anónima (Int => Int =)

Métodos : no son objetos sino asignados a una instancia de una clase, es decir, un objeto. Exactamente lo mismo que el método en java o funciones miembro en c ++ (como señaló Raffi Khatchadourian en un comentario a esta pregunta ), etc. Un ejemplo simple de un método es como sigue:

def m1(x: Int) = x + x
m1(2)  // 4

La línea anterior no es una simple asignación de valores sino una definición de un método. Cuando invoque este método con el valor 2 como la segunda línea, la x se sustituye por 2 y se calculará el resultado y obtendrá 4 como salida. Aquí obtendrá un error si simplemente escribe m1 porque es un método y necesita el valor de entrada. Al usar _ puedes asignar un método a una función como bramido:

val f2 = m1 _  // Int => Int = <function1>



Links