Scala’s interpreter has two ways to parse function parameters (function arguments):
call-by-value: first evaluate the value of the parameter expression, and then apply it inside the function
Ncall-by-name: applies unevaluated parameter expressions directlyto the inside of a function
Before entering the interior of the function, the value transfer method has already calculated the value of the parameter expression, while the alias call calculates the value of the parameter expression inside the function.
This creates the phenomenon that the interpreter evaluates the value of the expression each time a name call is used.
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("Obtain time in nanoseconds") System.nanoTime } def delayed( t: => Long ) = { println("Within the delayed method") println("parameter: " + t) t } } In the above example, we declared delayed method, which is used in variable names and variable types => symbol to set the alias call. Execute the above code, and the output is as follows:
$ scalac Test.scala $ scala Test Within the delayed method Obtain time in nanoseconds parameter: 241550840475831 Obtain time in nanoseconds In the instance delay method prints a message indicating that it entersthe method, and then delay method prints the received value and finally returns t.