关于scala中求值策略的相关问题
Scala里有两种求职策略:
Call by value 按值进行调用,对函数实参求值,且仅求值一次,求到的值会传入函数,直接替换掉函数里面所对应的形式参数
Call by name 按名调用,在进行函数调用的时候不会对函数的实参进行表达式的求值,而是把表达式传入函数体内,替换掉函数体内所对应的形式参数,在函数体内每次使用到这个形参的时候,会进行求值,即进行函数实参每次在函数体内被用到时都会求值
Scala通常使用call by value,如果函数形参类型以 “=>” 开头,那么会使用call by name
Def foo(x: Int) = x //Call by value
Def foo(x: => Int) =x //call by name
求职策略的例子
例1 ,Call by value,先计算test(7,8),再计算 7*7,最后得49
例2 ,Call by name,先计算test(3+4,8),再计算 (3+4)*(3+4),然后计算(7)*(3+4),再计算7*7,最后得49