您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java Scala偏函數與偏應用函數怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java Scala偏函數與偏應用函數怎么使用”文章能幫助大家解決問題。
偏函數(Partial Function),是一個數學概念它不是"函數"的一種, 它跟函數是平行的概念。
Scala中的Partia Function是一個Trait,其的類型為PartialFunction[A,B],其中接收一個類型為A的參數,返回一個類型為B的結果。
例如:
val pf: PartialFunction[Int, String] = { case 1 => "One" case 2 => "Two" case 3 => "Three" case _ => "Other" } println(pf(1)) //One println(pf(2)) //Two println(pf(3)) //Three println(pf(4)) //Other
偏函數內部有一些方法,比如isDefinedAt、OrElse、 andThen、applyOrElse等等。
isDefinedAt : 這個函數的作用是判斷傳入來的參數是否在這個偏函數所處理的范圍內。
剛才定義的pf來嘗試使用isDefinedAt(),只要是數字都是正確的,因為有case _=>"Other"這一句。如果換成其他類型就會報錯。
val pf: PartialFunction[Int, String] = { case 1 => "One" case 2 => "Two" case 3 => "Three" case _ => "Other" } println(pf.isDefinedAt(1)) //true println(pf.isDefinedAt(2)) //true println(pf.isDefinedAt(3)) //true println(pf.isDefinedAt(4)) //true println(pf.isDefinedAt("1")) /** * 類型不匹配 * type mismatch; * found : String("1") * required: Int * println(pf.isDefinedAt("1")) */
orElse : 將多個偏函數組合起來使用,效果類似case語句。
val onePF: PartialFunction[Int, String] = { case 1 => "One" } val twoPF: PartialFunction[Int, String] = { case 2 => "Two" } val threePF: PartialFunction[Int, String] = { case 3 => "Three" } val otherPF: PartialFunction[Int, String] = { case _ => "Other" } val newPF = onePF orElse twoPF orElse threePF orElse otherPF println(newPF(1)) //One println(newPF(2)) //Two println(newPF(3)) //Three println(newPF(4)) //Other
這樣,newPF跟原先的pf效果是一樣的。
andThen: 相當于方法的連續調用,比如g(f(x))。
pf1的結果返回類型必須和pf2的參數傳入類型必須一致,否則會報錯。
val pf1: PartialFunction[Int, String] = { case i if i == 1 => "One" } val pf2: PartialFunction[String, String] = { case str if str eq "One" => "The num is 1" } val num = pf1 andThen pf2 println(num(1)) //The num is 1
applyOrElse:它接收2個參數,第一個是調用的參數,第二個是個回調函數。如果第一個調用的參數匹配,返回匹配的值,否則調用回調函數。
val pf: PartialFunction[Int, String] = { case 1 => "One" } println(pf.applyOrElse(1, { num: Int => "two" })) //One println(pf.applyOrElse(2, { num: Int => "two" })) //two
偏應用函數(Partial Applied Function)也叫部分應用函數,跟偏函數(Partial Function)從英文名來看只有一字之差,但他們二者之間卻有天壤之別。
部分應用函數, 是指一個函數有n個參數, 而我們為其提供少于n個參數, 那就得到了一個部分應用函數。
舉個例子,定義好一個函數有3個參數,再提供幾個有1-2個已知參數的偏應用函數
def add(x: Int, y: Int, z: Int) = x + y + z // x 已知 def addX = add(1, _: Int, _: Int) println(addX(2, 3)) //6 println(addX(3, 4)) //8 // x 和 y 已知 def addXAndY = add(10, 100, _: Int) println(addXAndY(1)) //111 // z 已知 def addZ = add(_: Int, _: Int, 10) println(addZ(1, 2)) //13
關于“Java Scala偏函數與偏應用函數怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。