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

Java Scala偏函數(shù)與偏應用函數(shù)超詳細講解

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

偏函數(shù)

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

Scala中的Partia Function是一個Trait,其的類型為PartialFunction[A,B],其中接收一個類型為A的參數(shù),返回一個類型為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 : 這個函數(shù)的作用是判斷傳入來的參數(shù)是否在這個偏函數(shù)所處理的范圍內(nèi)。

剛才定義的pf來嘗試使用isDefinedAt(),只要是數(shù)字都是正確的,因為有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 : 將多個偏函數(shù)組合起來使用,效果類似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: 相當于方法的連續(xù)調(diào)用,比如g(f(x))。

pf1的結(jié)果返回類型必須和pf2的參數(shù)傳入類型必須一致,否則會報錯。

   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個參數(shù),第一個是調(diào)用的參數(shù),第二個是個回調(diào)函數(shù)。如果第一個調(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

偏應用函數(shù)

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

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

舉個例子,定義好一個函數(shù)有3個參數(shù),再提供幾個有1-2個已知參數(shù)的偏應用函數(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ù)與偏應用函數(shù)超詳細講解的文章就介紹到這了,更多相關(guān)Java Scala偏函數(shù)與偏應用函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章帶你入門Java接口

    一篇文章帶你入門Java接口

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

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

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

    SpringBoot中常用注解的使用合集

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

    Spring Security 圖片驗證碼功能的實例代碼

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

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

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

    java中的啟動命令使用

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

    Java項目Guava包?HashMultimap使用及注意事項

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

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

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

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

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

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

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

最新評論

达孜县| 宁南县| 邵阳县| 大石桥市| 怀集县| 韩城市| 潼南县| 交城县| 民勤县| 屏南县| 清涧县| 吕梁市| 香格里拉县| 邵武市| 大关县| 秦安县| 凌云县| 越西县| 绥芬河市| 凌云县| 商水县| 江城| 安图县| 柳林县| 噶尔县| 黔东| 和田县| 米脂县| 南召县| 扶绥县| 清丰县| 江西省| 镇巴县| 黔江区| 乐平市| 洛扎县| 方山县| 青川县| 平潭县| 香港 | 东源县|