函数的字面量

39 阅读1分钟

/*
  * 函数字面量 
  * 另一种定义函数的方式
  /*  
  
  // 定义函数的方式一: def
  def getSum(x:Int, y:Int):Int = {
    x + y
  }

  // 定义函数的方式二: 字面量
  val getSum1 = (x:Int, y:Int) => {
    x + y
  }


  def main(args: Array[String]): Unit = {
    println( getSum(10,20))
    println( getSum1(10,20))
函数的简化

/*
* 函数字面量的简化写法
 */

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

 // 省略 { }
 val getSum1 = (x:Int, y: Int) => x + y

 // 使用 _ 来代替形参
 val getSum2 = (_:Int) + (_:Int)

 // 使用 _ 来代替形参, (Int,Int)=>Int 就是getSum3的类型!
 val getSum3:(Int, Int)=>Int = _ + _


 def main(args:Array[String]): Unit = {
   println( getSum(10,20))
   println( getSum1(10,20))
   println( getSum2(10,20))
   println( getSum3(10,20))

/*
*部分应用函数
* 
* 如果一个函数需要两个参数,而我们只给了两个参数,会怎么样?
 */
 
 def getSum(a:Int,b:Int,c:Int):Int = {
   a + b + c
 }
 
 def main(args:Array[String]): Unit = {
   println( getSum(10,20,30))
   
   val t = getSum(10, 20,_) // t 就是部分应用函数!
   
   val t1 = getSum(_,20,_)
   
   println( t(50))
   
   print( t1(20,50)  )
/**
 * 
 * 高阶函数: 一种特殊的函数,它的参数或者返回值是函数类型
 * 1.map函数
 * 
 */

def main(args:Array[String]): Unit = {
  val arr1 = Array(1,2,3,4,5,6)
  //Array是一个构造器,用来定义一个数组
  // arr1 就是一个数组对象,它有很多的方法,其中就有map.
  // for 循环来输出数组中每一个元素
  
  val fn = (x:Int) => x * 2
  //fn是一个函数,它被传给了map.map是一个高阶函数
  val arr2 = arr1.map(fn)
  
  // for循环来输出数组中每一个元素
  for(i <- arr2){
    println(i)