溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Scala函數(shù)文本的短格式和占位符語法的用法

發(fā)布時(shí)間:2021-07-15 09:42:29 來源:億速云 閱讀:181 作者:chen 欄目:編程語言

這篇文章主要講解了“Scala函數(shù)文本的短格式和占位符語法的用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Scala函數(shù)文本的短格式和占位符語法的用法”吧!

函數(shù)文本的短格式

Scala提供了許多方法去除冗余信息并把函數(shù)文本寫得更簡短。注意留意這些機(jī)會(huì),因?yàn)樗鼈兡茏屇闳サ舸a里亂七八糟的東西。

一種讓函數(shù)文本更簡短的方式是去除參數(shù)類型。因此,前面帶過濾器的例子可以寫成這樣:

scala> someNumbers.filter((x) => x > 0)  res7: List[Int] = List(5, 10)

Scala編譯器知道x一定是整數(shù),因?yàn)樗吹侥懔⒖淌褂昧诉@個(gè)函數(shù)過濾整數(shù)列表(由someNumbers暗示)。這被稱為目標(biāo)類型化:target typing,因?yàn)楸磉_(dá)式的目標(biāo)使用——本例中someNumbers.filter()的參數(shù)——影響了表達(dá)式的類型化——本例中決定了x參數(shù)的類型。目標(biāo)類型化的精確細(xì)節(jié)并不重要。你可以簡單地從編寫一個(gè)不帶參數(shù)類型的函數(shù)文本開始,并且,如果編譯器不能識(shí)別,再加上類型。幾次之后你就對(duì)什么情況編譯器能或不能解開謎題有感覺了。

第二種去除無用字符的方式是省略類型是被推斷的參數(shù)之外的括號(hào)。前面例子里,x兩邊的括號(hào)不是必須的:

scala> someNumbers.filter(x => x > 0)  res8: List[Int] = List(5, 10)

占位符語法

如果想讓函數(shù)文本更簡潔,可以把下劃線當(dāng)做一個(gè)或更多參數(shù)的占位符,只要每個(gè)參數(shù)在函數(shù)文本內(nèi)僅出現(xiàn)一次。比如,_ > 0對(duì)于檢查值是否大于零的函數(shù)來說就是非常短的標(biāo)注:

scala> someNumbers.filter(_ > 0)  res9: List[Int] = List(5, 10)

你可以把下劃線看作表達(dá)式里需要被“填入”的“空白”。這個(gè)空白在每次函數(shù)被調(diào)用的時(shí)候用函數(shù)的參數(shù)填入。例如,由于someNumbers在第113頁被初始化為值List(-11, -10, -5, 0, 5, 10),filter方法會(huì)把_ > 0里的空格首先用-11替換,就如-11 > 0,然后用-10替換,如-10 > 0,然后用-5,如-5 > 0,這樣直到List的***一個(gè)值。因此,函數(shù)文本_ > 0與稍微冗長一點(diǎn)兒的x => x > 0相同,演示如下:

scala> someNumbers.filter(x => x > 0)  res10: List[Int] = List(5, 10)

有時(shí)你把下劃線當(dāng)作參數(shù)的占位符時(shí),編譯器有可能沒有足夠的信息推斷缺失的參數(shù)類型。例如,假設(shè)你只是寫_ + _:

scala> val f = _ + _  < console>:4: error: missing parameter type for expanded  function ((x$1, x$2) => x$1.$plus(x$2))   val f = _ + _   ?

這種情況下,你可以使用冒號(hào)指定類型,如下:

scala> val f = (_: Int) + (_: Int)  f: (Int, Int) => Int = < function>  scala> f(5, 10)  res11: Int = 15

請(qǐng)注意_ + _將擴(kuò)展成帶兩個(gè)參數(shù)的函數(shù)文本。這也是僅當(dāng)每個(gè)參數(shù)在函數(shù)文本中最多出現(xiàn)一次的情況下你才能使用這種短格式的原因。多個(gè)下劃線指代多個(gè)參數(shù),而不是單個(gè)參數(shù)的重復(fù)使用。***個(gè)下劃線代表***個(gè)參數(shù),第二個(gè)下劃線代表第二個(gè),第三個(gè)……,如此類推。

感謝各位的閱讀,以上就是“Scala函數(shù)文本的短格式和占位符語法的用法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Scala函數(shù)文本的短格式和占位符語法的用法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI