scala难点----------------------------函数的参数求值策略、方法作为参数传递时自动做隐形转换

scala函数的参数:求值策略
1、call by value:对函数的实参求值,并只求值一次
举例:def test1(x:Int, y:Int):Int = x+x 没有用到y

    2、call by name:函数的实参每次在函数体内部被调用的时候,都会进行求值
        举例:def test2(x: => Int, y: => Int):Int = x + x  没有用到y

    3:、一个复杂的例子
        x是call by value
        y是call by name
        def test3(x:Int, y: => Int):Int = 1

        在定义一个函数
        def loop():Int = loop

        分别进行调用
        scala> test3(1, loop) -->正常
        res31: Int = 1

        scala> test3(loop, 1) -> 死循环   

4.自己的理解:
call by value:不管怎样都会求实参,并且只求一次
call by name:只有用的时候才求实参

这里写图片描述


                  方法作为参数传递时自动做隐形转换
#可以将函数作为方法的参数进行传递,也可以将方法作为方法的参数传递,但是程序本身会做隐形转换
        scala> val arr = Array(1,2,3,5,8)
        scala> val f = (x: Int) => x*x
        f: Int => Int = <function1>

        scala> def m(x:Int) = x*x
        m: (x: Int)Int

        scala> arr.map(f)
        res15: Array[Int] = Array(1, 4, 9, 25, 64)

        scala> arr.map(m)
        res16: Array[Int] = Array(1, 4, 9, 25, 64)

        #显式将方法转换为函数
        scala> m _
        res19: Int => Int = <function1>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值