scala中的函数

函数基本用法

1.方法定义用def,函数的参数 要写类型,不写类型不可以。
2.函数的返回值类型可以不写,会自动推断
3.scala会将函数体中最后一行计算的结果当做返回值返回
4.可以写“return”,写了return要显式的声明方法体的返回类型。
5.定义方法时,如果不写“=”,那么无论方法体中最后一行计算的结果返回是什么,都会被丢弃,返回Unit
6.方法体可以一行搞定,那么方法体的“{... ...} ” 可以省略不写

    def max(x:Int,y:Int) = {
      if(x>y){
         x
      }else{
         y
      }
    }


    println(max(100,2))

    def max(x:Int,y:Int) = if(x>y) x else y 

    println(max(100,2))
View Code

递归函数

递归函数要显式的声明返回类型

    def fun(x:Int):Int = {
      if(x==1){
        1
      }else{
        x*fun(x-1)
      }
    }
    println(fun(5))
View Code

函数的参数有默认值

def fun(x:Int=100,y:Int=200) = x+y

println(fun(y=80))

可变长参数的函数

    def fun(s:String*)= {
      s.foreach((elem:String)=>{
        println(elem)
      })
    }
    fun("hello","a","b","c")

匿名函数

    val fun: (Int, Int) => Int = (x:Int,y:Int)=>{
      x+y
    }

    println(fun(10,20))

偏应用函数

偏应用函数是一个表达式,将方法中不变的参数写上,变化的参数使用“_”表示,下次直接调用这个偏应用表达式直接传入变化的参数就可以

    def showLog(date:Date,log:String) = {
      println("date is "+date+",log is "+log)
    }

    val date = new Date()
    showLog(date,"a")
    showLog(date,"b")
    showLog(date,"c")

    val fun = showLog(date,_:String)

    fun("aaa")
    fun("bbb")
    fun("ccc")

嵌套函数

    def fun(x:Int) = {
      def fun1(num:Int):Int = {
              if(num==1){
                  1
              }else{
                  num*fun1(num-1)
              }
      }
      fun1(x)
    }

    println(fun(5))

高阶函数

1.函数的参数是函数
2.函数的返回是函数 --函数的返回是函数时,要显式声明函数的返回类型
3.函数的参数和返回都是函数

//函数的参数是函数

    def fun1(f:(Int,Int)=>Int,s:String):String ={
      val result = f(100,200)
      result +"~"+s
    }

    val result = fun1((a:Int,b:Int)=>{a*b},"hello")
    println(result)

//函数的返回是函数

    def fun(a:Int,b:Int) :(String,String)=>String = {
      val result = a*b
      def fun1(s:String,s1:String) :String= {
        s+"@"+s1+"#"+result
      }
      fun1
    }

    println(fun(10,20)("hello","world"))//hello@world#200

//函数的参数和返回都是函数
    def fun(f:(Int,Int)=>Int) :(String,String)=>String= {

      val result = f(8,9)

      def fun1(s1:String,s2:String):String ={
        s1+"@"+s2+"$"+result
      }
      fun1

    }


    println(fun((a:Int,b:Int)=>{a-b})("hello","world"))
View Code

柯里化函数

柯里化函数就是高阶函数的简化版

    def fun(a:Int,b:Int)(c:Int,d:Int) ={
      a+b+c+d
    }

   println( fun(1,2)(3,4))

 

posted @ 2020-04-24 17:45  xd_xumaomao  阅读(164)  评论(0编辑  收藏  举报