中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

scala匿名函數案例分析

發布時間:2023-03-17 11:22:47 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

今天小編給大家分享一下scala匿名函數案例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1.匿名函數含義

@1.說明

沒有名字的函數就是匿名函數。

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

x:表示輸入參數類型;Int:表示輸入參數類型;函數體:表示具體代碼邏輯

1.1傳遞匿名函數含義

@2.傳遞匿名函數至簡原則:

(1)參數的類型可以省略,會根據形參進行自動的推導

(2)類型省略之后,發現只有一個參數,則圓括號可以省略;其他情

況:沒有參數和參數超過 1 的永遠不能省略圓括號。

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

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

1.2傳遞匿名函數第一層代碼解析

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

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

-slaca第一層

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

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

@3.1 首先定義一個函數:參數包含 “數據” 和 “邏輯函數”

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

類型和返回值類型,

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

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

3.sum(a, b):比較復雜,喝口水再來看,乖!但是記住:是水不是口水!

3.1:首先 “傳遞匿名函數”中的 邏輯是對數據的操作

3.2:那么可以理解為“傳遞匿名函數” 的數據就是為邏輯準備的

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

退一萬步來講,邏輯跟尼瑪數據分開,還操作個錘子

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

@3.3 第二層的時候 才傳遞 《數據----->真實的數據》 《邏輯函數----->真

正的邏輯》

3.1 這其實跟 “java”特別像

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

@4.1 Java第一層
Java是先聲明一個方法:也以傳遞兩個數字,并進行相加 為例

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

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

2 a+b---->方法體 :此處也是省了類型,因為參數已經聲明過了

@4.2java第二層

等到調用時,才傳遞數據

add(2,3);

1.add(1,2) —> 此處省了邏輯,因為方法體中聲明過

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

看最后的思路吧

3.2傳遞匿名函數第二層代碼解析

// (1)標準函數調用
 println(calculator(2, 3, (x: Int, y: Int) => {x + y}))
 // (2)如果只有一行,則大括號也可以省略
 println(calculator(2, 3, (x: Int, y: Int) => x + y))
 // (3)參數的類型可以省略,會根據形參進行自動的推導;
 println(calculator(2, 3, (x , y) => x + y))
 // (4)如果參數只出現一次,則參數省略且后面參數可以用_代替
 println(calculator(2, 3, _ + _))

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

瑪德,搜了半天沒搜到,略過…略過…

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

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

scala第二層:

1.數據---->真正的數據

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

3.第一層的 sum(a, b)已經完成了邏輯包含數據的操作,當第二層傳遞完數

據,這部分就真正的完成了。剩下的就是看邏輯怎么對數據進行操作

3.1 x: Int, y: Int) => x + y ---->(x , y) => x + y 省類型:會根據形參進行自動的推導。沒什么獨特的,java也是一樣的:(參數有類型,方法體中省了的)

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

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

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

以上文章僅小編個人見解,如有錯誤,請大家暢所欲言。請各位dai佬諒解

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

同時小編寫的不易,從八點開始寫,寫道12點,中間吃了個飯。也請大家

補充:scala匿名函數案例

匿名函數

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

基本介紹

沒有名字的函數就是匿名函數,可以通過函數表達式 來設置匿名函數。

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

應用實例

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

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

下面的表達式就定義了一個接受一個 Double 類型輸入參數的匿名函數:

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

說明:

  • (x:Double) => 3 * x 就是匿名函數

  • (x:Double) 是形參列表,=> 是規定語法表示后面是函數體,3 * x 就是函數體,如果有多行,可以 {} 換行寫。

  • triple 是指向匿名函數的變量。

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

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

因為 Scala 編譯器可以從 ints 中的數據推斷 i 是一個 Int,所以可以刪除 Int 聲明:

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

因為只有一個參數,所以不需要在參數 i 周圍的括號:

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

因為當參數在函數中只出現一次時,Scala 允許您使用 _ 符號而不是變量名,所以代碼可以進一步簡化:

val doubledInts = ints.map(_ * 2)

案例

請編寫一個匿名函數,可以返回2個整數的和,并輸出該匿名函數的類型。

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

以上就是“scala匿名函數案例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广丰县| 新闻| 普陀区| 思南县| 高密市| 绥芬河市| 娄底市| 宁波市| 澄江县| 东源县| 翼城县| 锡林郭勒盟| 苏尼特左旗| 瑞丽市| 塔城市| 长宁区| 广饶县| 夏邑县| 青川县| 德昌县| 尼玛县| 双牌县| 凌云县| 博白县| 玉林市| 婺源县| 抚远县| 化隆| 家居| 清镇市| 沂源县| 多伦县| 达州市| 土默特右旗| 昌黎县| 玉溪市| 依安县| 巴南区| 大丰市| 安岳县| 抚宁县|