偏函數
偏函數(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
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
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
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
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中的偏函數與偏程式應用函數的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中