Explicación del principio de método para funcionar en Scala

  En Scala, existe una gramática llamada método a función, pero no lo es. La esencia de esto es que la función llama a este método. La función sigue siendo la función y el método sigue siendo el método. A continuación se explica a través del código.

  1. Primero escriba los métodos más utilizados para la explicación.
object CallByName {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val func = m _
    func(5)
  }
  // 定义如下方法
  def m(x:Int):Unit = println(x * x)
}

El resultado de la ejecución es el siguiente: Se
Inserte la descripción de la imagen aquí
  puede observar que cuando se ejecuta el método func, el resultado obtenido es el resultado calculado por la lógica del método m. Esta forma de escritura parece convertir el método m en la función func, pero No lo es.
  Puede ver fácilmente la razón ejecutándolo a través del shell de scala. Primero, defina un método m, como se muestra a continuación,
Inserte la descripción de la imagen aquí
y luego ejecute'm _ 'por separado. Como se muestra en la figura, podemos
Inserte la descripción de la imagen aquí
ver que cuando ejecutamos'm _ ', en realidad se genera Una función no ha cambiado y la lógica de' x * x 'no aparece en esta función. El método m en realidad se llama dentro de esta función, pero la firma de este método es la misma que la de el m método. IDEA también es muy fácil de ver a través de la depuración a cabo, he jugado aquí dos puntos de ruptura, como se muestra
Inserte la descripción de la imagen aquí
por la depuración corre, corre a la función func cuando, como se muestra a continuación
Inserte la descripción de la imagen aquí
y luego continuar con el siguiente paso, como se muestra a continuación
Inserte la descripción de la imagen aquí
lata a, El método m en sí mismo se ejecuta realmente.
  A través del siguiente código, puede tener una comprensión más clara del "método para funcionar"

object CallByName {
    
    
  def main(args: Array[String]): Unit = {
    
    

    val func = m _
    /*等价于*/
    val func2 = (y:Int) => m(y)
    /*等价于*/
    val func3 = (v:Int) => {
    
    
      m(v)
    }
    func(5)
  }
  // 定义如下方法
  def m(x:Int):Unit = println(x * x)
}

Muchos libros pueden explicar este fenómeno como un método para una función, pero estrictamente hablando, solo se genera una nueva función, y este método se llama dentro de la función. Escribo esto con la esperanza de que todos tengan una comprensión más clara de esto.

Supongo que te gusta

Origin blog.csdn.net/AnameJL/article/details/114767927
Recomendado
Clasificación