strict
定义: a strict function always evaluates its arguments. 也就是说在调用函数时,会先把参数进行计算再传入。
def strictFun(i: Int) = {
println("strictFun in body")
(i, i)
}
strictFun {
println("strictFun outside")
41
}
执行结果:
strictFun outside
strictFun in body
res0: (Int, Int) = (41,41)
结论:可以看到 strictFun in body
只被打印了一次。说明strictFun对参数进行了cache。
strict
定义: function may choose not to evaluate one or more of its arguments. 也就是说在调用函数时,直接把参数表达式传入,并不进行计算。在函数体内被调用的地方进行计算。
def nonStrictFun(i: => Int) = {
println("nonStrictFun in body")
(i, i)
}
nonStrictFun {
println("nonStrictFun outside")
41
}
执行结果:
nonStrictFun in body
nonStrictFun outside
nonStrictFun outside
res1: (Int, Int) = (41,41)
结论: nonStrictFun outside
被打印了两次,函数不对参数进行cache,每次在函数体内的调用都被重新计算。