函数进阶

52 阅读1分钟

1. 函数字面量

函数的字面量语法

除了使用def之外的,另一种定义函数的方式语法:var 变量 = (参数列表)=>{方法体} 它省略了def,函数名以及函数的返回值类型。

// 定义  
val sum1 = (x:Int, y:Int)=>{x+y}  
// 调用  
var s = sum1(10,34)

简化写法: Scala的函数字面量的简化方式有两种方式:

第一种方式为:_(占位符)。如果函数中的参数在方法体中只使用了一次,可以用_替换。

第二种方式为:只有一个表达式时,可以省略括号。

val sum1 = (x:Int, y:Int) =>{x+y}  
val sum2 = (x:Int, y:Int) => x+y  
val sum3:(Int, Int)=>Int = _ + _

eg:1.

object dsj03 {
  /*
  * 函数字面量语法,另一种定义函数的方式
  *
  **/

  //定义一个函数,求两个数的和
  def sum1(x:Int, y:Int):Int = {
    x + y
  }

  //函数字面量语法
  //相对于使用def来说,它:
  //1.省略了返回值
  //2.省略了函数名,现在就是变量名
  //3.多一个 =>
  val sum2 = (x:Int, y:Int) => { x+y }

  def main(args: Array[String]): Unit = {
    println(sum1(10,20))
    println(sum2(10,20))
  }
}

eg:2.

object dsj03 {
  /*
  *
  *
  *
  **/

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

  val sum3:(Int,Int)=>Int=_+_

  def main(args: Array[String]): Unit = {
    println(sum1(10,20))
    println(sum2(10,20))
    println(sum3(10,20))
  }
}

eg:3.

//
  //
  //
  //
  val sum2 = (a:Int,b:Int,c:Int) => a+b+c

  def main(args: Array[String]): Unit = {
//    println(sum1(10,20,30))
//    如果参数给的不多,会报错
//    println(sum2(10,20))
    val r = sum2(10,20, _)

    println(r(50))

    val r1 = sum2(_,20,_)
    println(r1(10,30))
  }
}

2. 部分应用函数