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

scala 匿名函數(shù)案例詳解

 更新時(shí)間:2023年03月17日 10:38:19   作者:大?俠數(shù)據(jù)  
Scala支持一級(jí)函數(shù),函數(shù)可以用函數(shù)文字語法表達(dá),即(x:Int)=> x + 1,該函數(shù)可以由一個(gè)叫作函數(shù)值的對(duì)象來表示,這篇文章主要介紹了scala 匿名函數(shù)詳解,需要的朋友可以參考下

1.匿名函數(shù)含義

@1.說明

沒有名字的函數(shù)就是匿名函數(shù)。

(x:Int)=>{函數(shù)體}

x:表示輸入?yún)?shù)類型;Int:表示輸入?yún)?shù)類型;函數(shù)體:表示具體代碼邏輯

1.1傳遞匿名函數(shù)含義

@2.傳遞匿名函數(shù)至簡原則:

(1)參數(shù)的類型可以省略,會(huì)根據(jù)形參進(jìn)行自動(dòng)的推導(dǎo)

(2)類型省略之后,發(fā)現(xiàn)只有一個(gè)參數(shù),則圓括號(hào)可以省略;其他情

況:沒有參數(shù)和參數(shù)超過 1 的永遠(yuǎn)不能省略圓括號(hào)。

(3)匿名函數(shù)如果只有一行,則大括號(hào)也可以省略

(4)如果參數(shù)只出現(xiàn)一次,則參數(shù)省略且后面參數(shù)可以用_代替

1.2傳遞匿名函數(shù)第一層代碼解析

小編在此將代碼分為:“第一層”和“第二層”,方便大家理解:

          和匿名函數(shù)的相愛相殺,
                               各位看官,正片開始。

-slaca第一層

//需求:傳遞的函數(shù)有兩個(gè)參數(shù)
//函數(shù)含義:傳遞兩個(gè)數(shù),并對(duì)兩個(gè)數(shù)進(jìn)行相加的邏輯操作
def calculator(a: Int, b: Int, sum: (Int, Int) => Int): Int = {
 sum(a, b)
 }

【函數(shù)具體解析】——小編提示:一定要先看懂3.2再看后面

@3.1 首先定義一個(gè)函數(shù):參數(shù)包含 “數(shù)據(jù)” 和 “邏輯函數(shù)”

@3.2 第一層的時(shí)候 只需要聲名《“數(shù)據(jù)”的類型》 或《 “邏輯函數(shù)”的參數(shù)

類型和返回值類型,

1.(a: Int, b: Int) ------------------->數(shù)據(jù)的類型

2.(sum: (Int, Int) => Int)--------->邏輯函數(shù)的參數(shù)類型和返回值類型

3.sum(a, b):比較復(fù)雜,喝口水再來看,乖!但是記?。菏撬皇强谒?/p>

3.1:首先 “傳遞匿名函數(shù)”中的 邏輯是對(duì)數(shù)據(jù)的操作

3.2:那么可以理解為“傳遞匿名函數(shù)” 的數(shù)據(jù)就是為邏輯準(zhǔn)備的

3.3 :所以邏輯函數(shù)就得包含數(shù)據(jù),就有了(x:Int)=>{函數(shù)體} 中函數(shù)體包
含sum(a, b),這樣才能進(jìn)行 對(duì)數(shù)據(jù)的邏輯操作

退一萬步來講,邏輯跟尼瑪數(shù)據(jù)分開,還操作個(gè)錘子

所以sum(a, b) ->第一層的最后操作:邏輯與數(shù)據(jù)的結(jié)合(跟那愛情一樣是
吧。聽懂掌聲,為愛鼓掌)就在這完成了。

@3.3 第二層的時(shí)候 才傳遞 《數(shù)據(jù)----->真實(shí)的數(shù)據(jù)》 《邏輯函數(shù)----->真

正的邏輯》

3.1 這其實(shí)跟 “java”特別像

小編也在此將代碼分為:“第一層”和“第二層”,方便大家理解:

@4.1 Java第一層
Java是先聲明一個(gè)方法:也以傳遞兩個(gè)數(shù)字,并進(jìn)行相加 為例

public static int add(int a,int b){
        return a+b;
    }

1(int:a,int:b)----> 參數(shù)

2 a+b---->方法體 :此處也是省了類型,因?yàn)閰?shù)已經(jīng)聲明過了

@4.2java第二層

等到調(diào)用時(shí),才傳遞數(shù)據(jù)

add(2,3);

1.add(1,2) —> 此處省了邏輯,因?yàn)榉椒w中聲明過

2.想必看到這兒,大家已經(jīng)有了心中的小九九,接下來大家跟小編一起看

看最后的思路吧

3.2傳遞匿名函數(shù)第二層代碼解析

// (1)標(biāo)準(zhǔn)函數(shù)調(diào)用
 println(calculator(2, 3, (x: Int, y: Int) => {x + y}))
 // (2)如果只有一行,則大括號(hào)也可以省略
 println(calculator(2, 3, (x: Int, y: Int) => x + y))
 // (3)參數(shù)的類型可以省略,會(huì)根據(jù)形參進(jìn)行自動(dòng)的推導(dǎo);
 println(calculator(2, 3, (x , y) => x + y))
 // (4)如果參數(shù)只出現(xiàn)一次,則參數(shù)省略且后面參數(shù)可以用_代替
 println(calculator(2, 3, _ + _))

想必看到這兒,各位看官的思緒就像…那句話咋說來著,忘求了。讓我百度下下

瑪?shù)?,搜了半天沒搜到,略過…略過…

小編提示:沒有思緒的可以在看兩遍,琢磨琢磨?。?!

正片開始:不是蒼老師哦!

scala第二層:

1.數(shù)據(jù)---->真正的數(shù)據(jù)

2.邏輯---->真正的邏輯

3.第一層的 sum(a, b)已經(jīng)完成了邏輯包含數(shù)據(jù)的操作,當(dāng)?shù)诙觽鬟f完數(shù)

據(jù),這部分就真正的完成了。剩下的就是看邏輯怎么對(duì)數(shù)據(jù)進(jìn)行操作

3.1 x: Int, y: Int) => x + y ---->(x , y) => x + y 省類型:會(huì)根據(jù)形參進(jìn)行自動(dòng)的推導(dǎo)。沒什么獨(dú)特的,java也是一樣的:(參數(shù)有類型,方法體中省了的)

3.2 a: Int, b: Int—>2, 3 結(jié)合Scala 一二層的參數(shù)看
int a,int b-------->2,3 結(jié)合Java 一二層的參數(shù)看
從這兒我們可以看出 只要知道參數(shù)的名,和類型 即可 直接給值

3.3 (Int, Int) => Int----->_ + _ 單從這兒和3.2可以理解為 把參數(shù)名寫為"_"可能是scala的一個(gè)特色嘛,因?yàn)閺?.2得知 需要參數(shù)名和類型,才能直接給值嘛。

3.4 但是我們?cè)?第一層的函數(shù)塊中寫的是 sum(a,b)這里省了類型,因?yàn)榭梢詮膮?shù)a: Int, b: Int得到參數(shù)名的類型,所以我們的"+"是基于 sum(a,b) 做的推斷,此時(shí)參數(shù)名,參數(shù)類型都有了,就可以直接傳值了,但是說白了,這個(gè)參數(shù)名是固定的,再怎么給值,也不能變。所以scala為了簡寫,就用“_”代替了

以上文章僅小編個(gè)人見解,如有錯(cuò)誤,請(qǐng)大家暢所欲言。請(qǐng)各位dai佬諒解

<小編也只學(xué)了十來天scala,所以有很多不足的地方,請(qǐng)指出,謝謝大家了

同時(shí)小編寫的不易,從八點(diǎn)開始寫,寫道12點(diǎn),中間吃了個(gè)飯。也請(qǐng)大家

補(bǔ)充:scala匿名函數(shù)案例

匿名函數(shù)

Scala提供了一個(gè)相對(duì)輕量級(jí)的語法來定義匿名函數(shù)。源代碼中的匿名函數(shù)稱為函數(shù)文字,在運(yùn)行時(shí),函數(shù)文字被實(shí)例化為稱為函數(shù)值的對(duì)象。Scala支持一級(jí)函數(shù),函數(shù)可以用函數(shù)文字語法表達(dá),即(x:Int)=> x + 1,該函數(shù)可以由一個(gè)叫作函數(shù)值的對(duì)象來表示。

基本介紹

沒有名字的函數(shù)就是匿名函數(shù),可以通過函數(shù)表達(dá)式 來設(shè)置匿名函數(shù)。

匿名函數(shù)(也稱為 lambda)是作為參數(shù)傳遞給高階函數(shù)的代碼塊。 維基百科將 匿名函數(shù) 定義為“未綁定到標(biāo)識(shí)符的函數(shù)定義”。

應(yīng)用實(shí)例

Scala 中定義匿名函數(shù)的語法很簡單,箭頭左邊是參數(shù)列表,右邊是函數(shù)體。

使用匿名函數(shù)后,我們的代碼變得更簡潔了。

下面的表達(dá)式就定義了一個(gè)接受一個(gè) Double 類型輸入?yún)?shù)的匿名函數(shù):

val triple = (x:Double) => 3*x
println(triple(3))

說明:

  • (x:Double) => 3 * x 就是匿名函數(shù)
  • (x:Double) 是形參列表,=> 是規(guī)定語法表示后面是函數(shù)體,3 * x 就是函數(shù)體,如果有多行,可以 {} 換行寫。
  • triple 是指向匿名函數(shù)的變量。

一旦你熟悉了 Scala,你就會(huì)一直使用這種形式來編寫匿名函數(shù),這些函數(shù)在函數(shù)的一個(gè)位置使用一個(gè)變量。 但如果你愿意,你也可以用更長的形式來寫它們

val doubledInts = ints.map((i: Int) => i * 2)

因?yàn)?Scala 編譯器可以從 ints 中的數(shù)據(jù)推斷 i 是一個(gè) Int,所以可以刪除 Int 聲明:

val doubledInts = ints.map((i) => i * 2)

因?yàn)橹挥幸粋€(gè)參數(shù),所以不需要在參數(shù) i 周圍的括號(hào):

val doubledInts = ints.map(i => i * 2)

因?yàn)楫?dāng)參數(shù)在函數(shù)中只出現(xiàn)一次時(shí),Scala 允許您使用 _ 符號(hào)而不是變量名,所以代碼可以進(jìn)一步簡化:

val doubledInts = ints.map(_ * 2)

案例

請(qǐng)編寫一個(gè)匿名函數(shù),可以返回2個(gè)整數(shù)的和,并輸出該匿名函數(shù)的類型。

val f1 = (n1: Int, n2: Int ) => {
    println("匿名函數(shù)被調(diào)用")
    n1 + n2
}
println("f1類型=" + f1)
println(f1(10, 30))

到此這篇關(guān)于scala 匿名函數(shù)詳解的文章就介紹到這了,更多相關(guān)scala 匿名函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理

    SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理

    這篇文章主要介紹了SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • java 字符串截取的實(shí)例詳解

    java 字符串截取的實(shí)例詳解

    這篇文章主要介紹了java 字符串截取的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Spring 自動(dòng)裝配的二義性實(shí)例解析

    Spring 自動(dòng)裝配的二義性實(shí)例解析

    這篇文章主要介紹了Spring 自動(dòng)裝配的二義性實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java實(shí)現(xiàn)哈夫曼文件解壓縮

    java實(shí)現(xiàn)哈夫曼文件解壓縮

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)哈夫曼文件解壓縮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Spring零基礎(chǔ)到進(jìn)階之鴻蒙開篇

    Spring零基礎(chǔ)到進(jìn)階之鴻蒙開篇

    Spring框架是一個(gè)開放源代碼的J2EE應(yīng)用程序框架,由Rod Johnson發(fā)起,是針對(duì)bean的生命周期進(jìn)行管理的輕量級(jí)容器(lightweight container)。 Spring解決了開發(fā)者在J2EE開發(fā)中遇到的許多常見的問題,提供了功能強(qiáng)大IOC、AOP及Web MVC等功能
    2022-07-07
  • Java 數(shù)組ArrayList常用語法詳解

    Java 數(shù)組ArrayList常用語法詳解

    這篇文章主要介紹了Java 數(shù)組ArrayList常用語法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • springboot接收J(rèn)SON實(shí)現(xiàn)示例解析

    springboot接收J(rèn)SON實(shí)現(xiàn)示例解析

    這篇文章主要為大家介紹了springboot如何接收J(rèn)SON的實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載(替換過程)

    Log4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載(替換過程)

    Apache?開源項(xiàng)目?Log4j?的遠(yuǎn)程代碼執(zhí)行漏洞細(xì)節(jié)被公開,由于?Log4j?的廣泛使用,該漏洞一旦被攻擊者利用會(huì)造成嚴(yán)重危害,下面小編給大家?guī)砹薒og4j2?重大漏洞編譯好的log4j-2.15.0.jar包下載,感興趣的朋友一起看看吧
    2021-12-12
  • 詳解SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳

    詳解SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳

    本篇文章主要介紹了SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳,本地的文件上傳到資源服務(wù)器上,比較好的辦法就是通過ftp上傳。這里是結(jié)合SpringMVC+ftp的形式上傳的,有興趣的可以了解一下。
    2016-12-12
  • SpringBatch數(shù)據(jù)讀取的實(shí)現(xiàn)(ItemReader與自定義讀取邏輯)

    SpringBatch數(shù)據(jù)讀取的實(shí)現(xiàn)(ItemReader與自定義讀取邏輯)

    本文主要介紹了SpringBatch數(shù)據(jù)讀取的實(shí)現(xiàn), 文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04

最新評(píng)論

潜山县| 镇康县| 永兴县| 化隆| 隆回县| 镇江市| 定陶县| 河津市| 静海县| 玉门市| 马关县| 桓台县| 金门县| 延安市| 贵溪市| 宁晋县| 兴业县| 永靖县| 吉首市| 长阳| 卢湾区| 鹤峰县| 舒兰市| 社会| 宜宾县| 南岸区| 龙里县| 习水县| 应城市| 湘潭县| 福安市| 海伦市| 宜兰县| 固原市| 丁青县| 西充县| 会东县| 金坛市| 于田县| 卓尼县| 富锦市|