函数进阶

26 阅读2分钟

1.函数的字面量语法

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

//定义一个函数,求两个数的和
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))
}

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

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

/**
 * 函数字面量语法d的简化写法
 * 1.函数体只有一句,可以省略{}
 * 2.函数只用一次,可以用_代替参数名。指定类型。
 */

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))
}

2.Scala部分应用函数

如果一个函数包含多个参数,对该函数传递部分参数使得这个函数返回一个函数,那么这种函数叫做部分应用函数。

/**
 * 部分应用函数
 */
 //定义一个函数,它用来计算三个整数的和
  //def sum1(a:Int,b:Int,c:Int):Int={
  //  a+b+c
  //}

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


def main(args: Array[String]): Unit = {
  //   println(sum1(10,20,30))
  //   如果参数给的不够,会报错!
  //   println(sum1(10,20))
  val r=sum2(10,20,_)//_代表一个占位符:现在还不知道具体是什么
 //r就是部分应用函数!对sum2来说,它只有一部分参数
  println(r(50))
  val r1=sum2(_,20,_)
  println(r1(10,30))
}