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.
- 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
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,
y luego ejecute'm _ 'por separado. Como se muestra en la figura, podemos
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
por la depuración corre, corre a la función func cuando, como se muestra a continuación
y luego continuar con el siguiente paso, como se muestra a continuación
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.