欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Scala偏函數(shù)與偏應(yīng)用函數(shù)超詳細(xì)講解

 更新時(shí)間:2023年04月08日 09:44:11   作者:你∈我  
Scala是一種多范式的編程語(yǔ)言,支持面向?qū)ο蠛秃瘮?shù)式編程。Scala也支持異常處理,即在程序運(yùn)行過(guò)程中發(fā)生意外或錯(cuò)誤時(shí),采取相應(yīng)的措施

偏函數(shù)

偏函數(shù)(Partial Function),是一個(gè)數(shù)學(xué)概念它不是"函數(shù)"的一種, 它跟函數(shù)是平行的概念。

Scala中的Partia Function是一個(gè)Trait,其的類(lèi)型為PartialFunction[A,B],其中接收一個(gè)類(lèi)型為A的參數(shù),返回一個(gè)類(lèi)型為B的結(jié)果。

例如:

    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

偏函數(shù)內(nèi)部有一些方法,比如isDefinedAt、OrElse、 andThen、applyOrElse等等。

isDefinedAt

isDefinedAt : 這個(gè)函數(shù)的作用是判斷傳入來(lái)的參數(shù)是否在這個(gè)偏函數(shù)所處理的范圍內(nèi)。

剛才定義的pf來(lái)嘗試使用isDefinedAt(),只要是數(shù)字都是正確的,因?yàn)橛衏ase _=>"Other"這一句。如果換成其他類(lèi)型就會(huì)報(bào)錯(cuò)。

    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"))
    /**
     * 類(lèi)型不匹配
     * type mismatch;
     * found   : String("1")
     * required: Int
     * println(pf.isDefinedAt("1")) */

orElse

orElse : 將多個(gè)偏函數(shù)組合起來(lái)使用,效果類(lèi)似case語(yǔ)句。

    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: 相當(dāng)于方法的連續(xù)調(diào)用,比如g(f(x))。

pf1的結(jié)果返回類(lèi)型必須和pf2的參數(shù)傳入類(lèi)型必須一致,否則會(huì)報(bào)錯(cuò)。

   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個(gè)參數(shù),第一個(gè)是調(diào)用的參數(shù),第二個(gè)是個(gè)回調(diào)函數(shù)。如果第一個(gè)調(diào)用的參數(shù)匹配,返回匹配的值,否則調(diào)用回調(diào)函數(shù)。

  val pf: PartialFunction[Int, String] = {
      case 1 => "One"
    }
    println(pf.applyOrElse(1, { num: Int => "two" }))  //One
    println(pf.applyOrElse(2, { num: Int => "two" }))  //two

偏應(yīng)用函數(shù)

偏應(yīng)用函數(shù)(Partial Applied Function)也叫部分應(yīng)用函數(shù),跟偏函數(shù)(Partial Function)從英文名來(lái)看只有一字之差,但他們二者之間卻有天壤之別。

部分應(yīng)用函數(shù), 是指一個(gè)函數(shù)有n個(gè)參數(shù), 而我們?yōu)槠涮峁┥儆趎個(gè)參數(shù), 那就得到了一個(gè)部分應(yīng)用函數(shù)。

舉個(gè)例子,定義好一個(gè)函數(shù)有3個(gè)參數(shù),再提供幾個(gè)有1-2個(gè)已知參數(shù)的偏應(yīng)用函數(shù)

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

到此這篇關(guān)于Java Scala偏函數(shù)與偏應(yīng)用函數(shù)超詳細(xì)講解的文章就介紹到這了,更多相關(guān)Java Scala偏函數(shù)與偏應(yīng)用函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java常用的時(shí)間類(lèi)以及其轉(zhuǎn)化方式

    Java常用的時(shí)間類(lèi)以及其轉(zhuǎn)化方式

    這篇文章主要介紹了Java常用的時(shí)間類(lèi)以及其轉(zhuǎn)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解Spring框架入門(mén)

    詳解Spring框架入門(mén)

    這篇文章主要介紹了詳解Spring框架入門(mén),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解JNA中的回調(diào)方法

    詳解JNA中的回調(diào)方法

    這篇文章主要介紹了JNA中的回調(diào)方法,主要包括JNA 中的 Callback,callback 的應(yīng)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • springboot 2.3之后消失的hibernate-validator解決方法

    springboot 2.3之后消失的hibernate-validator解決方法

    這篇文章主要介紹了springboot 2.3之后消失的hibernate-validator解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

    Java數(shù)據(jù)結(jié)構(gòu)中的HashMap和HashSet詳解

    HashMap和HashSet都是存儲(chǔ)在哈希桶之中,通過(guò)本文我們可以先了解一些哈希桶是什么,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • Sublime Text 打開(kāi)Java文檔中文亂碼的解決方案

    Sublime Text 打開(kāi)Java文檔中文亂碼的解決方案

    這篇文章主要介紹了Sublime Text 中文亂碼的解決方案,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Sentinel熱點(diǎn)規(guī)則示例詳解分析

    Sentinel熱點(diǎn)規(guī)則示例詳解分析

    這篇文章主要介紹了何為熱點(diǎn)?熱點(diǎn)即經(jīng)常訪(fǎng)問(wèn)的數(shù)據(jù)。很多時(shí)候我們希望統(tǒng)計(jì)某個(gè)熱點(diǎn)數(shù)據(jù)中訪(fǎng)問(wèn)頻次最高的 Top K 數(shù)據(jù),并對(duì)其訪(fǎng)問(wèn)進(jìn)行限制
    2021-09-09
  • Java線(xiàn)程間通訊的幾種方法小結(jié)

    Java線(xiàn)程間通訊的幾種方法小結(jié)

    線(xiàn)程通信可以用于控制并發(fā)線(xiàn)程的數(shù)量,本文主要介紹了Java線(xiàn)程間通訊的幾種方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • SpringBoot遇到的坑@Qualifier報(bào)紅的解決

    SpringBoot遇到的坑@Qualifier報(bào)紅的解決

    這篇文章主要介紹了SpringBoot遇到的坑@Qualifier報(bào)紅的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 淺談Java中復(fù)制數(shù)組的方式

    淺談Java中復(fù)制數(shù)組的方式

    這篇文章主要介紹了Java中復(fù)制數(shù)組的幾種方法,需要的朋友可以參考下。
    2017-08-08

最新評(píng)論