Erklärung des Funktionsprinzips in Scala

  In Scala gibt es eine solche Grammatik, die als Methode-zu-Funktion bezeichnet wird, aber nicht. Das Wesentliche dabei ist, dass die Funktion diese Methode aufruft. Die Funktion ist immer noch die Funktion, und die Methode ist immer noch die Methode. Im Folgenden wird erläutert durch den Code.

  1. Schreiben Sie zunächst die am häufigsten verwendeten Methoden zur Erklärung auf
object CallByName {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val func = m _
    func(5)
  }
  // 定义如下方法
  def m(x:Int):Unit = println(x * x)
}

Das Ausführungsergebnis ist wie folgt: Es
Fügen Sie hier eine Bildbeschreibung ein
  ist ersichtlich, dass, wenn die Methode func ausgeführt wird, das erhaltene Ergebnis das Ergebnis ist, das durch die Logik der Methode m berechnet wird. Diese Schreibweise scheint die Methode m in die Funktion func umzuwandeln, aber es ist nicht.
  Sie können den Grund leicht erkennen, indem Sie ihn über die Scala-Shell ausführen. Definieren Sie zuerst eine Methode m, wie unten gezeigt,
Fügen Sie hier eine Bildbeschreibung ein
und führen Sie sie dann separat aus. Wie in der Abbildung gezeigt, können wir
Fügen Sie hier eine Bildbeschreibung ein
dies sehen, wenn wir _ ausführen. ', es wird tatsächlich generiert Eine Funktion hat sich nicht geändert, und die Logik von' x * x 'erscheint in dieser Funktion nicht. Die m-Methode wird tatsächlich innerhalb dieser Funktion aufgerufen, aber die Signatur dieser Methode ist dieselbe wie die von die m - Methode. IDEA ist auch sehr einfach durch die Debug aus , um zu sehen, die ich hier zwei Stützpunkte gespielt, wie dargestellt
Fügen Sie hier eine Bildbeschreibung ein
durch Debug laufen, lief auf die Funktion func wenn, wie unten dargestellt ,
Fügen Sie hier eine Bildbeschreibung ein
und dann mit dem nächsten Schritt weiter, wie unten gezeigt
Fügen Sie hier eine Bildbeschreibung ein
Dose to, Die m-Methode selbst wird tatsächlich ausgeführt.
  Durch den folgenden Code können Sie die "Funktionsweise" besser verstehen.

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)
}

Viele Bücher mögen dieses Phänomen als Methode für eine Funktion erklären, aber genau genommen wird nur eine neue Funktion generiert, und diese Methode wird innerhalb der Funktion aufgerufen. Ich schreibe dies in der Hoffnung, dass jeder ein klareres Verständnis dafür hat.

Ich denke du magst

Origin blog.csdn.net/AnameJL/article/details/114767927
Empfohlen
Rangfolge