Scala编程基础(3)

求值策略

(1)Call By Value:对函数实参求值且仅求一次

(2)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

例:

① def test1(x:Int,y:Int):Int = x*x               ② def test2(x:=>Int,y:=>Int):Int = x*x


value:test1(3+4,8)                                        name:test2(3+4,8)

         test1(7,8)                                                      (3+4)*(3+4)

         7*7                                                                7*(3+4)

        少一步                                                            7*7


        test1(7,2*4)                                                    test2(7,2*4)   

        test1(7,8)                                                       7*7

        7*7                                                                少一步


def bar(x:Int ,y:=>Int):Int = 1

def loop():Int = loop

bar (1,loop)  res0:Int = 1

bar(loop,1)   死循环

高阶函数

函数是一等公民,Scala支持:

1,把函数作为实参传递给另外一个函数

2,把函数作为返回值

3,把函数赋值给变量

4,把函数存储在数据结构里

高阶函数:

1,参数是函数

2,返回值是函数

匿名函数:本质是函数常量

(形参列表)=>{函数体}

柯里化:

把具有多个参数的函数,转换为一条函数链,每个节点上是单一参数。

递归函数:

尾递归解决堆栈溢出,所有递归形式的调用,都出现在函数的末尾

猜你喜欢

转载自blog.csdn.net/mua_mua_mua/article/details/83148535
今日推荐