这两种方法有什么区别?
def method1(msg: => String) = print(msg)
def method2(msg: String) = print(msg)
Run Code Online (Sandbox Code Playgroud)
我可以调用它们.
method1("1")
method2("2")
Run Code Online (Sandbox Code Playgroud)
他们打印 12
它被称为按名称传递参数,当参数按名称传递并在函数内部访问时,它再次进行求值.您可以运行示例代码:
def method1(msg: => String) = {
println(msg)
println(msg)
}
def method2(msg: String) = {
println(msg)
println(msg)
}
method1({println("Evaluate Arg1"); "Method1"})
method2({println("Evaluate Arg2"); "Method2"})
Run Code Online (Sandbox Code Playgroud)
输出:
Evaluate Arg1
Method1
Evaluate Arg1
Method1
Evaluate Arg2
Method2
Method2
Run Code Online (Sandbox Code Playgroud)
正如您在每次访问msg它时都可以在method1中看到的那样,重新进行了评估