scala求值策略

来源:互联网 发布:招商银行黄金行情软件 编辑:程序博客网 时间:2024/06/04 22:20

关于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