美文网首页
Scala基础篇-函数

Scala基础篇-函数

作者: helloworld1214 | 来源:发表于2015-12-25 18:52 被阅读874次

    1.普通函数,scala函数不明显使用return返回值,如果有返回值,最后一行就是返回值

    1.1定义返回值为Int的函数

    def fun(x:Int,y:Int) : Int = {

        x+y//返回x+y的结果

    }

    等价函数:

    def fun(x:Int,y:Int) = {//不写返回值类型scala会自动匹配最后一行的输出结果类型作为返回值类型

        x+y//返回x+y的结果

    }


    1.2无返回值函数

    //如果没有返回值可以省略冒号、返回值类型、等号;定义没有返回值的函数(返回值为Unit)

    def fun(x:String,y:String){

        println(x + "-" + y)

    }

    相当于 

    def fun(x:Int,y:Int) : Unit={

        println(x + "-" + y)

    }


    1.3定义带有初始值参数的函数

    def fun(x:Int=10) = {

        x + 5

    }

    注意:调用有参数的函数必须在函数名后加()

    调用带有初始值参数的函数,传入的参数会覆盖参数初始值

    2.值函数

    说明:函数体赋给一个变量,调用的时候直接使用变量的名称

    val valueFunction = (x:Int)=>x+1

    调用:valueFunction(20)

    相当于如下函数的定义:

    def valueFunction(x:Int) : Int = x+1

    多个语句的值函数

    dec valueMultiFunction(x:Int) {

        var b = x+2

        println("b" + b)

    }

    3.匿名函数

    val str1 = Array(1,2,3,4).map((x:Int)=>x+1).mkString(",")

    //参数类型推倒

    val str2 = Array(1,2,3,4).map((x)=>x+1).mkString(",")

    //函数只有一个参数的话,可以省略()

    val str3 = Array(1,2,3,4).map(x=>x+1).mkString(",")

    ////如果参数右边只出现一次,则可以进一步简化

    val str4 = Array(1,2,3,4).map(_+1).mkString(",")

    4.高阶函数

    4.1函数参数

    = 左边定义函数的参数 ,规定传入的“函数”参数类型,= 右边调用传入的“函数”并给一个参数值,这个参数值的类型就是定义的传入“函数”参数的“参数”类型如f:(Int)为Int型(太绕嘴了)

    定义:def paramFunction(f:(Int)=>String)=f(10)

    说明:f:(Int)=>String定义传入的“函数”参数,这个函数的输入参数为Int型,返回值为String类型

    调用:paramFunction((x:Int)=>"Hello " + x)

    4.2调用函数产生一个新的函数(函数返回值为函数)

    定义:def productNewFunction(y:Int)=(x:Int)=>x * y

    说明:(大白话表达)相当于一个函数里定义了一个匿名函数,把最外层函数的参数赋给函数体内的匿名函数,匿名函数有自己的参数,当调用外层函数的时候返回一个中间函数,当再次调用中间函数的时候才会返回数据结果。

    演示:

    5.函数闭包

    定义:

    var freeParam=10

    def closeFun(x:Int)=x + freeParam

    说明:

    x:绑定变量,x的类型在定义函数的时候就已经定义好了,x的值在函数调用的时候确定

    freeParam:自由变量,在定义函数之前类型不固定,freeParam值可以不断的变化,freeParam值影响到整个函数的结果。注意:freeParam变量必须在闭包函数定义之前定义,否则报错

    调用:

    关于闭包(大白话):freeParam变量的类型和值在运行的时候确定,而且freeParam的值可以不断的变化并且影响整个函数的结果,这种由自由式变为封闭式的过程就是闭包

    相关文章

      网友评论

          本文标题:Scala基础篇-函数

          本文链接:https://www.haomeiwen.com/subject/dznvhttx.html