最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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,其的類型為PartialFunction[A,B],其中接收一個(gè)類型為A的參數(shù),返回一個(gè)類型為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"這一句。如果換成其他類型就會(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"))
    /**
     * 類型不匹配
     * type mismatch;
     * found   : String("1")
     * required: Int
     * println(pf.isDefinedAt("1")) */

orElse

orElse : 將多個(gè)偏函數(shù)組合起來(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é)果返回類型必須和pf2的參數(shù)傳入類型必須一致,否則會(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接口

    一篇文章帶你入門Java接口

    這篇文章主要介紹了JAVA中接口的定義和接口的實(shí)現(xiàn),文中講解非常細(xì)致,配合代碼更好的幫大家學(xué)習(xí)參考,感興趣的朋友可以了解下
    2021-08-08
  • spring中使用@Autowired注解無(wú)法注入的情況及解決

    spring中使用@Autowired注解無(wú)法注入的情況及解決

    這篇文章主要介紹了spring中使用@Autowired注解無(wú)法注入的情況及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot中常用注解的使用合集

    SpringBoot中常用注解的使用合集

    注解?annotation一般是用來(lái)定義一個(gè)類、屬性和一些方法,以便程序能夠被編譯處理,本文為大家整理了SpringBoot中的常用注解以及它們的使用,需要的可以參考下
    2023-07-07
  • Spring Security 圖片驗(yàn)證碼功能的實(shí)例代碼

    Spring Security 圖片驗(yàn)證碼功能的實(shí)例代碼

    spring security是一系列的過(guò)濾器鏈,所以在這里驗(yàn)證碼也聲明為過(guò)濾器,加在過(guò)濾器鏈的 登錄過(guò)濾器之前,然后自定義一個(gè)異常類,來(lái)響應(yīng)驗(yàn)證碼的錯(cuò)誤信息.這篇文章主要介紹了Spring Security 圖片驗(yàn)證碼,需要的朋友可以參考下
    2018-03-03
  • Java實(shí)現(xiàn)讀取項(xiàng)目中文件(.json或.properties)的方法詳解

    Java實(shí)現(xiàn)讀取項(xiàng)目中文件(.json或.properties)的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)讀取項(xiàng)目中文件的方法,例如.json或.properties,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • java中的啟動(dòng)命令使用

    java中的啟動(dòng)命令使用

    本文詳細(xì)介紹了Java啟動(dòng)參數(shù)的分類和具體用途,涵蓋了基本內(nèi)存管理、元空間管理、垃圾回收、性能調(diào)優(yōu)與診斷、JavaAgent、系統(tǒng)屬性以及應(yīng)用執(zhí)行等幾類參數(shù),通過(guò)合理配置這些參數(shù),可以顯著提升Java應(yīng)用的性能、可管理性和可調(diào)試性
    2025-01-01
  • Java項(xiàng)目Guava包?HashMultimap使用及注意事項(xiàng)

    Java項(xiàng)目Guava包?HashMultimap使用及注意事項(xiàng)

    guava基本上可以說(shuō)是java開(kāi)發(fā)項(xiàng)目中,大概率會(huì)引入的包,今天介紹的主角是一個(gè)特殊的容器HashMultmap,可以簡(jiǎn)單的將它的數(shù)據(jù)結(jié)構(gòu)理解為Map<K,?Set<V>>,今天主要介紹下基礎(chǔ)的知識(shí)點(diǎn)?HashMultmap級(jí)使用,感興趣的朋友一起看看吧
    2022-05-05
  • java中 == 與 equal 的區(qū)別講解

    java中 == 與 equal 的區(qū)別講解

    這篇文章介紹了java中 == 與 equal 的區(qū)別,有需要的朋友可以參考一下
    2013-10-10
  • java 出現(xiàn)問(wèn)題javax.servlet.http.HttpServlet was not found解決方法

    java 出現(xiàn)問(wèn)題javax.servlet.http.HttpServlet was not found解決方法

    這篇文章主要介紹了java 出現(xiàn)問(wèn)題javax.servlet.http.HttpServlet was not found解決方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Java中Set集合的使用和底層原理解析

    Java中Set集合的使用和底層原理解析

    這篇文章主要介紹了Java中Set集合的使用和底層原理,Set集合的功能上基本上與Collection的API一致, Set集合沒(méi)有擴(kuò)展額外的API,本文通過(guò)示例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-12-12

最新評(píng)論

阳原县| 石棉县| 甘洛县| 宣武区| 恩平市| 隆安县| 罗田县| 垦利县| 固始县| 靖江市| 怀仁县| 桐梓县| 兴仁县| 蒙自县| 南丹县| 焦作市| 高青县| 汤原县| 洛浦县| 五指山市| 兴山县| 颍上县| 合阳县| 雅安市| 敦化市| 柘城县| 安西县| 辰溪县| 维西| 南阳市| 石嘴山市| 浦北县| 定襄县| 绥阳县| 河西区| 乐平市| 阿图什市| 拉萨市| 彩票| 新郑市| 河源市|