欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala方法与函数(二)

程序员文章站 2022-06-14 18:55:59
...

1、方法定义
1)方法体中最后返回值可以使用return,如果使用了return,那么方法体的返回值类型一定要指定
2)如果方法体中没有return,默认将方法体最后一行计算的结果当作返回值返回,方法体的返回值类型可以省略,会自动推断
3)定义方法传入的参数一定要指定类型
4)方法体中如果可以一行搞定,括号可省略
5)如果定义方法时,省略了方法名称和方法体之间的“=”,那么无论方法体最后一行计算的结果是什么,都会被丢弃,返回Unit
6)定义方法时使用def

  def max(x:Int,y:Int): Int ={
          if(x>y) x else y
        }
        val result = max(10,100)
       // println(result)

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

2、递归方法
递归方法要显示声明汉书的返回值类型

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

3、参数有默认值的方法

def fun2(a:Int=10,b:Int=20): Int ={
        a+b
      }

4、可变参数的方法
=>代表匿名函数

//      def fun3(s:String*): Unit ={
//      s.foreach(elem=>{println(elem)})//=>代表匿名函数(elem:String)=>{println(elem)}
//      //        for(elem <- s){
//      //          println(elem)
//      //        }
//    }
    def fun3(s:String*): Unit ={
      s.foreach(println(_))//=>代表匿名函数(elem:String)=>{println(elem)}
      s.foreach(println)
    }
   // fun3("hello","a","b")

5、匿名函数
"=>"就是匿名函数,多用于方法的参数是函数时,常用匿名函数

 def fun4=(a:Int,b:Int)=>{
      a+b
    }
    //println(fun4(10,40))

6、嵌套方法

def fun5(num:Int): Int ={
      def fun6(a:Int): Int ={
        if(a==1) 1 else a*fun6(a-1)
      }
      fun6(num)
    }
    //println(fun5(num=5))

7、偏应用函数
某些情况下,方法中参数非常多,调用这个方法非常频繁,每次调用只有固定的某个参数变化,其他不变,可以定义为偏应用来实现

 def showLog(date:Date,log:String): Unit ={
      println(s"date is $date ,log is $log")
    }
    val date = new Date()
//    showLog(date,log="a")
//    showLog(date,log="b")
//    showLog(date,log="c")
    def fun7=showLog(date,_:String)
//    fun7("aaa")
//    fun7("bbb")
//    fun7("ccc")

8、高阶函数
1)方法的参数是函数
2)方法的返回是函数,<显示写出函数返回值类型,加下划线可以不显示的声明方法的返回值类型>
3)方法的参数和返回都是函数

//方法的参数是函数
    def fun8(a:Int,b:Int): Int ={
      a+b
    }
    def fun9(f:(Int,Int)=>Int,s:String): String ={
      val i = f(100,200)
      i+"#"+s
    }
    val result1 = fun9(fun8,"scala")
    val result3 = fun9((a:Int,b:Int)=>{a*b},"scala")
     //println(result3)
  //方法的返回是函数
    def fun10(s:String): (String,String)=>String ={
      def fun11(s1:String,s2:String): String ={
        s1+"#"+s2+"*"+s
      }
    fun11 _   //"_"可以直接将方法当作返回值
  }
   // println(fun10("a")("b","c"))
//方法的参数和返回都是函数
    def fun12(f:(Int,Int)=>Int):(String,String)=>String ={
      val i:Int = f(1,2)
      def fun13(s1:String,s2:String): String ={
        s1+"@"+s2+"&"+i
      }
    fun13
    }
    println(fun12((a:Int,b:Int)=>{a+b})("hello","world"))

9、柯里化函数

def fun14(a:Int,b:Int)(c:Int,d:Int): Int ={
       a+b+c+d
     }
   println( fun14(1,2)(3,4))
    }