Scala編程之閉包(closure)

一、概念

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

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供貴定企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為貴定眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

二、小例子

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是匿名函數(shù)外部變量,但是卻被用在匿名函數(shù)的里面,就像關(guān)在匿名函數(shù)里面一樣,所以我們把一個(gè)函數(shù)與其相關(guān)引用環(huán)境(變量)組合成一個(gè)整體叫做閉包

解釋:
1) (y: Int)=>x-y
返回的是一個(gè)匿名函數(shù),因?yàn)樵摵瘮?shù)引用到到函數(shù)外的x,那么該函數(shù)和x整體形成一個(gè)閉包
如:這里val f= minusxy(20)的f函數(shù)就是閉包
2)你可以這樣理解,返回函數(shù)是一個(gè)對(duì)象,而x就是該對(duì)象的一個(gè)字段,他們共同形成一個(gè)閉包
3)當(dāng)多次調(diào)用f時(shí)(可以理解多次調(diào)用閉包),發(fā)現(xiàn)使用的是同一個(gè)x,所以ⅹ不變
4)在使用閉包時(shí),主要搞清楚返回函數(shù)引用了函數(shù)外的哪些變量,因?yàn)樗麄儠?huì)組合成一個(gè)整體(實(shí)體),形成一個(gè)閉包

相信你通過上面那個(gè)例子已經(jīng)有所理解了,那么試試下面這個(gè)需求把

三、練練手

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

2)調(diào)用閉包,可以傳入一個(gè)文件名

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

如果已經(jīng)有.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}
}

四、閉包的好處

通過上邊那個(gè)小練習(xí)我們知道,如果使用傳統(tǒng)的方法,也可以輕松實(shí)現(xiàn)這個(gè)功能,但是傳統(tǒng)方法需要每次都傳入后綴名,比如.jpg,而閉包因?yàn)榭梢员A羯洗我玫哪硞€(gè)值,所以我們傳入一次就可以反復(fù)使用。

分享題目:Scala編程之閉包(closure)
文章路徑:http://muchs.cn/article32/iiospc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、商城網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)營(yíng)銷型網(wǎng)站建設(shè)、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)