91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Scala編程之閉包(closure)

發布時間:2020-07-16 04:23:05 來源:網絡 閱讀:608 作者:Stitch_x 欄目:大數據

一、概念

閉包:我們把一個函數與其相關引用環境(變量)組合成一個整體叫做閉包
概念晦澀難懂,下面我們用一個例子說明

二、小例子

def minusxy(x:Int) = (y:Int)=>x-y
val f=minusxy(20)
println("f(1)="+f(1))//19
println("f(2)="+f(2))//18

minusxy中x是匿名函數外部變量,但是卻被用在匿名函數的里面,就像關在匿名函數里面一樣,所以我們把一個函數與其相關引用環境(變量)組合成一個整體叫做閉包

解釋:
1) (y: Int)=>x-y
返回的是一個匿名函數,因為該函數引用到到函數外的x,那么該函數和x整體形成一個閉包
如:這里val f= minusxy(20)的f函數就是閉包
2)你可以這樣理解,返回函數是一個對象,而x就是該對象的一個字段,他們共同形成一個閉包
3)當多次調用f時(可以理解多次調用閉包),發現使用的是同一個x,所以ⅹ不變
4)在使用閉包時,主要搞清楚返回函數引用了函數外的哪些變量,因為他們會組合成一個整體(實體),形成一個閉包

相信你通過上面那個例子已經有所理解了,那么試試下面這個需求把

三、練練手

1)編寫一個函數 makeSuffix(suffix: String)可以接收一個文件后綴名(比如.jpg),并返回一個閉包(closure)

2)調用閉包,可以傳入一個文件名

如果該文件名沒有指定的后綴(比如.jpg),則返回文件名.jpg。 文件名是 dog =》dog.jpg

如果已經有.jpg后綴,則返回原文件名。 文件名是cat.jpg => cat.jpg

3)要求使用閉包的方式完成

提示:String.endsWith(xx)
=========假裝有條分割線=============

object ClosureDemo {

  def main(args: Array[String]): Unit = {
    val f=makeSuffix(".jpg")
    println(f("cat"))
    println(f("dog.jpg"))
  }

  /**
    * 閉包
    * @param suffix 變量
    * @return
    */
  def makeSuffix(suffix:String)=(fileName:String)=>{if (fileName.endsWith(suffix)) fileName else fileName+suffix}
}

四、閉包的好處

通過上邊那個小練習我們知道,如果使用傳統的方法,也可以輕松實現這個功能,但是傳統方法需要每次都傳入后綴名,比如.jpg,而閉包因為可以保留上次引用的某個值,所以我們傳入一次就可以反復使用。

向AI問一下細節

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

AI

松溪县| 上林县| 黑龙江省| 海安县| 亚东县| 新河县| 盱眙县| 荣昌县| 松原市| 新兴县| 苗栗市| 龙泉市| 洛宁县| 宾阳县| 吴忠市| 太保市| 涞水县| 怀柔区| 辽阳县| 伊金霍洛旗| 墨玉县| 西乌珠穆沁旗| 堆龙德庆县| 廊坊市| 平舆县| 安丘市| 鄄城县| 德格县| 明溪县| 延庆县| 宁远县| 突泉县| 平利县| 虎林市| 渝中区| 岳西县| 济源市| 高碑店市| 京山县| 灵寿县| 瑞安市|