【Scala】6、方法和函数

总结:scala的不愧是函数式编程语言

object TestFunction2 {
  def main(args: Array[String]): Unit = {

    /*
    *  1.递归
    * */
    def fun1(i:Int):Int = {
      if(i==1) return 1;
      return i*fun1(i-1);
    }
    println(fun1(5))


    /*
    *  2.参数带默认值
    * */
    def fun2(i:Int=1,j:Int=2):Int = {
      return i+j;
    }
    println(fun2())
    println(fun2(10))
    println(fun2(j=10))

    /*
    *  3、变长参数列表
    * */
    def fun3(s:String*)={

      //for遍历
//      for(item<-s){
//        println(item);
//      }

      //lambda表达式 在scala中的体现
      s.foreach(item=> println(item))
      //在匿名函数内部只用了一次 可以用下划线代替
      s.foreach(println(_))
      //匿名函数只需要一个参数 而s的每一项都是一个 所以直接省略了
      s.foreach(println)
    }
    fun3("1","2")


    /*
    * 4、匿名函数(lambda表达式)
    * 下面的写法就类似于函数指针了 用的不多
    * 主要还是用在匿名函数作为参数传递
    * */

    def fun4=(a:Int,b:Int)=>{
      println(a+b);
    }
    fun4(3,4)

    /*
    * 5、嵌套函数
    * */
    def fun5(a:Int):Int={
      def fun6(b:Int):Int={
        if(b==1) return 1;
        return b*fun6(b-1);
      }
      fun6(a)
    }
    println(fun5(5))

    /*
    * 6、偏应用函数
    * 某些场景下 函数要被调用多次 只有少部分参数在变化其他参数都不变可以用偏应用函数
    * */

    def fun6(date:Date,str:String): Unit ={
      println(s"date is $date,str is $str")
    }

    //传统方式
    val date = new Date()
    fun6(date,"a")
    fun6(date,"b")
    fun6(date,"c")

    //偏应用函数
    def fun66=fun6(date,_:String)
    fun66("aa");
    fun66("bb");
    fun66("cc");



    /*
    * 7、高阶函数
    *   方法的参数是函数
    *   方法的返回是函数 返回值手动写 或者在返回值后面加上_
    *   方法的参数和返回都是函数  就是前两者的结合
    * */

    //方法的参数是函数
    def fun71(f:(Int,Int)=>Int,str:String)={
      println(f(100,200)+str)
    }
    fun71((a,b)=>a*b,"aa")

    //方法的返回是函数
    // 一种是直接把返回值类型写好
    def fun72(s:String):(String,String)=>String={
      def fun73(a:String,b:String):String={
        return a+b+s
      }
      fun73
    }

    //不写明返回值 自动推断 但是需要加上  _
    def fun74(s:String)={
      def fun73(a:String,b:String):String={
        return a+b+s
      }
      fun73 _
    }

    println(fun72("a")("b","ll"))
    println(fun74("a")("b","ll"))



    /*
    * 柯里化函数 简化第二种高阶函数
    * */

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

    println(fun8(1,2)(3))


  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值