scala 传值调用,传名调用

 

Scala的解释器在解析函数参数(function arguments)时有两种方式:

  • 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部;
  • 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部

在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。

传名调用时, 接受表达式的形参定义一般是: block: =>Unit   , 没有形参,返回类型Unit 

demo:


def test(code: => Unit) {
println("start")
code
println("end")
}

def test1(code: () => Unit) {
println("start")
code()
println("end")
}

//开始测试

test {
println("when evaluated")
println("bb")
}

println(".................")

test1 {
println("bb")
() => println("when evaluated")
}

结果:

start
when evaluated
bb
end
.................
bb
start
when evaluated
end

  

  

posted @ 2020-06-18 10:29  龘人上天  阅读(394)  评论(0编辑  收藏  举报