1. 程式人生 > 其它 >Scala之柯里化和閉包

Scala之柯里化和閉包

技術標籤:scala程式碼大資料scala

Scala之柯里化和閉包

一、匿名函式

沒有名字的函式就是匿名函式,可以直接通過函式字面量(表示式)來設定匿名函式,函式字面量定義格式如下。

在這裡插入圖片描述

二、函式柯里化&閉包

函式柯里化:將一個接收多個引數的函式轉化成一個接受一個引數的函式過程,可以簡單的理解為一種特殊的引數列表宣告方式。
閉包:就是一個函式和與其相關的引用環境(變數)組合的一個整體(實體)

三、案例

package com.scala.charpter05

object NoName {
  
  def main(args: Array[String]): Unit
= { //匿名函式 /** * 匿名函式: 沒有函式名的函式 * 匿名函式都是作為引數值傳遞給高階函式的 */ println(add(10, 20, (x: Int, y: Int) => x + y)) //方法就是函式 println(add(30,50,m)) println("==================================") //柯里化 /** * 柯里化: 有多個引數列表的方法稱之為柯里化 * 函式是物件, */
println(add(10, 20)(30)(40)) val func: Int => Int => Int = add2(10,20) val func2: Int => Int = func(30) println(func2(40)) println(add3(10, 20)(30)(40)) /** * 閉包: 函式體中使用了不屬於自身的變數的函式/方法 */ println("===============================")
m1(10,x=>x) val func3: (Int => Int) => Int = m1(10,_) println(func3(x=>x)) val func4 = (func3:Int=>Int)=>{ func3(10) } println(func4(x=>x)) } def add(x:Int,y:Int,func:(Int,Int)=>Int)=func(x,y) def m(x:Int,y:Int)=x*y //有多個引數列表 def add(x:Int,y:Int)(z:Int)(a:Int)=x+y+z+a /** * 柯里化演變過程 * @param x * @param y * @return */ def add2(x:Int,y:Int)={ val func1=(z:Int)=>{ val func2=(a:Int)=>x+y+z+a func2 } func1 } def add3(x:Int,y:Int)={ (z:Int)=>{ (a:Int)=>x+y+z+a } } //閉包測試所用函式 def m1(x:Int,func:Int=>Int)=func(x) }