scala的函数进阶

1.scala的函数字面量

   语法:(参数列表)=>{方法体}

2.函数字面量的简化:

   ①._(占位符)。当使用占位符替换变量时,需要指明变量的类型。

   ②.只有一个表达式时,可省略括号。例如:可以把(x:Int)=>{x+1}简写成(x:Int)=>x+1。

3.函数进阶的作用:自己不产生价值,调用其它的函数产生价值。

4.函数字面量的实例如下:

 def main(args: Array[String]): Unit = {
    //字面量
    //教室310+教室309
    println("教室310")//字面量
    var classRoom="教室310"//字面量

    //定义函数的方式1
    def sum(x:Int,y:Int)  ={
      x+y
    }
    println(sum(100,200))
    //定义函数的方式2
    var sum1=(x:Int,y:Int) => {x+y}
    //简写1,省略{}
    var sum2=(x:Int,y:Int) => x+y
    //简写2,用_占位符,(Int,Int)=>Int 它表示一种类型,收到两个整型的参数,返回一个整型值
    var sum3:(Int,Int) =>Int = _ + _
    //调用一个函数
    println(sum1(100,200))
  }
}

5.scala的函数的闭包

   闭包=函数+非局部函数

   特点:保持引用

   闭包:一个函数连同该函数的非局部变量的一个引用环境。写一个函数,它的返回值是一个函数。

6.闭包的实例如下:

//写一个函数,它的返回值是一个函数
  def main(args: Array[String]): Unit = {
    var f = (x:Int) => {
      var t =(y:Int) => x+y
      //t是一个函数
      //x就是一个非局部变量
      t
      //闭包=函数+非局部变量
      //特点:保持引用
    }
    var s =f(100)//s:(y:Int)=>100+y
    var res =s(200) //300
    var res1=s(300) //300
    println(res,res1)
  }


//闭包的实例:
  def main(args: Array[String]): Unit = {
    //奶茶店1
    var add = (x:Int,y:Int) => x + y
    //咖啡店1
    var mul= (x:Int,y:Int) => x * y
    //定义一个函数,它的特点是:第一个参数的类型是函数
    //美团
    var op=(fn:(Int,Int)=>Int,a:Int,b:Int) =>{
      fn(a,b)
    }
  //  add(100,200)
    println(op(add,100,200))
    println(op(mul,100,200))
  }

​

7.scala的函数的柯里化

   柯里化:1个小括号包含1个参数。

   语法:def  函数名(参数列表1) (参数列表2).....(参数列表n):type={

                     方法体

}

8.柯里化的注意要点:

   ①.不能传递部分函数。

   ②.可以利用隐式参数传递部分值。

   ③.不能返回新的函数。

9.函数柯里化实例如下:

def main(args: Array[String]): Unit = {
    def add(x:Int,y:Int)=x+y
    println(add(100,300))
     //柯里化的方式,定义一个函数
    def add(x:Int)(y:Int)(z:Int)=x+y+z
    //调用
   // println(add(100)(300)_)
    println(add(100)(200)(300))//直接给三个参数
    var t=add(100)(300)_//表示一个占位符。先算有两个参数的情况,结果是一个函数
    println(t(200))//传入最后一个参数,就能计算结果了
  }

10.Scala部分应用函数

    ①.部分应用函数的定义:如果一个函数包含多个参数,对该函数传递部分参数使得该函数返回一个函数,那么这种函数称为部分应用函数。

    ②.部分应用函数的语法:

       def  函数名  (参数列表X,Y....):type={

               f(Y)

}

    ③.部分应用函数的作用:返回新的函数。

11.部分应用函数的实例如下:

def main(args: Array[String]): Unit = {
    def mul(x:Int,y:Int,z:Int):Int ={
      println(s"x=$x,y=$y,z=$z")
      x*y*z
    }
    //println(mul(10,2,3))
    //f是:部分函数
    //_是:部分函数
    var f=mul(10,2,_)
    println(f(3))
  }
}

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值