Scala-Funktionsaufruf Call-by-Name (call-by-name)

Scala 函数Funktionen in Scala

Der Scala-Interpreter kennt zwei Arten, Funktionsargumente zu parsen:

  • Call-by-Value: Zuerst wird der Wert des Parameterausdrucks ausgewertet und dann innerhalb der Funktion eingesetzt;
  • Call-by-Name: Der nicht ausgewertete Parameterausdruck wird direkt innerhalb der Funktion eingesetzt

Bevor die Funktion betreten wird, hat der Call-by-Value-Ansatz den Parameterausdruck bereits ausgewertet, während Call-by-Name den Parameterausdruck innerhalb der Funktion auswertet.

Dies führt zu einem Phänomen: Jedes Mal, wenn Call-by-Name verwendet wird, wertet der Interpreter den Ausdruck einmal aus.

object Test {
   def main(args: Array[String]) {
        delayed(time());
   }

   def time() = {
      println("获取时间,单位为纳秒")
      System.nanoTime
   }
   def delayed( t: => Long ) = {
      println("在 delayed 方法内")
      println("参数: " + t)
      t
   }
}

Im obigen Beispiel haben wir die Methode delayed deklariert, die das Symbol => zwischen dem Variablennamen und dem Variablentyp verwendet, um Call-by-Name einzurichten. Die Ausführung des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
在 delayed 方法内
获取时间,单位为纳秒
参数: 241550840475831
获取时间,单位为纳秒

Im Beispiel gibt die Methode delay eine Meldung aus, die angibt, dass sie in die Methode eingetreten ist, dann gibt die Methode delay den empfangenen Wert aus und schließlich gibt sie t zurück.

Scala 函数Funktionen in Scala

Andere Erweiterungen