列子2
返回1
bar(1,loop) 先1进行计算,返回1,方法体没用到loop 不被调用
bar(loop,1)一直循环 先loop进行计算,无法返回
例子
求值策略
call by value vs call by name:
求值策略的例子:
call by value: 先对实参进行运算,且只求值一次,调用函数前就求值
call by name: 每次都运算 调用函数后有用到时才求值
随堂笔记--
Scala里有2种求值策略:
Call by Value 对函数实参求值,且仅求值一次 如: def foo(x: Int) = x
Call by Name 函数实参每次在函数体内被用到时都会求值 如:
def foo(x: => Int) = x
恰当的运用这2中求值策略,会提高代码的运行效率
call by value 对函数实参求得值后再才传给函数,且仅求一次--常用
call by name 函数实参每次在函数体内被用到时才会求值;形参以=>开头,会使用call by name
scala中所有的运算都是基于表达式
call by value 对函数实参求值,且仅求一次--常用
call by name 函数实参每次在函数体内被用的时都会求值;形参以=>开头,会使用call by name
Scala里有两种求值策略(Evaluation Strategy) Call By Value - 对函数实参求值,且仅求值一次 Call By Name - 函数实参每次在函数体内被用到时都会求值
求值策略例子
call by name 不用到值 的时候不会计算
求值策略的例子
求值策略的例子
求值策略 介绍
scala
函数调用函数
Call By Value:一般求值策略,当实参为表达式时先计算表达式值再传递给形参,只求值一次
Call By Name:特殊求值策略,在参数列表的参数类型前加入=>,直接传递,用到时再求值,会重复求值
Scala 2 种求值策略(Evaluation Strategy)
Call By Value
Call By Name