1. 程式人生 > 其它 >23_函式_閉包和柯里化

23_函式_閉包和柯里化

閉包
* 定義
* 如果一個函式,訪問了它外部(區域性)變數的值,那麼這個函式和它所處的環境,稱為閉包
* 使用場景
* 在巢狀函式中,內層函式可以 只用外出函式的任意變數
柯里化
* 定義
* 柯里化(Currying)指的是將原來接受兩個引數的函式變成新的接受一個引數的函式的過程。
* 新的函式返回一個以原有第二個引數為引數的函式。
* 示例
* def add(x:Int,y:Int)=x+y
* def add(x:Int)(y:Int) = x + y
* 說明
* 柯里化的形式是 函式的巢狀及函式的閉包性,並不是一個函式
*
* */
/**
  * @author gaocun
  * @create 2021-10-20 1:51 PM */
object 閉包和柯里化_06 {
  /*
  * 閉包
  *   定義
  *       如果一個函式,訪問了它外部(區域性)變數的值,那麼這個函式和它所處的環境,稱為閉包
  *   使用場景
  *       在巢狀函式中,內層函式可以 只用外出函式的任意變數
  * 柯里化
  *   定義
  *       柯里化(Currying)指的是將原來接受兩個引數的函式變成新的接受一個引數的函式的過程。
  *       新的函式返回一個以原有第二個引數為引數的函式。
  *   示例
  *       def add(x:Int,y:Int)=x+y
  *       def add(x:Int)(y:Int) = x + y
  *   說明
  *       柯里化的形式是 函式的巢狀及函式的閉包性,並不是一個函式
  *
  *
  * 
*/ def main(args: Array[String]): Unit = { // 測試閉包 def outerFun(x: Int, y: String) = { val id: Int = 100 def innerFun(): Unit = { printf("獲取外部函式變數 x:%d y:%s id:%d\n", x, y, id) } innerFun _ } val pt = outerFun(99, "dawang") println(pt) pt() println(
"=======函式 柯里化==================") def klhFun(x: Int)(y: Int): Int = x + y println(klhFun(10) _) println(klhFun(10)(1)) } }