成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 后端
本文節(jié)選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第八章。Scala是一種針對(duì) JVM 將函數(shù)和面向?qū)ο蠹夹g(shù)組合在一起的編程語(yǔ)言。

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

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

51CTO編輯推薦:Scala編程語(yǔ)言專題

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

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

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

  1. scala> someNumbers.filter(x => x > 0)  
  2. res8: List[Int] = List(510)  
占位符語(yǔ)法

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

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

  1. scala> someNumbers.filter(x => x > 0)  
  2. res10: List[Int] = List(510)  
有時(shí)你把下劃線當(dāng)作參數(shù)的占位符時(shí),編譯器有可能沒(méi)有足夠的信息推斷缺失的參數(shù)類型。例如,假設(shè)你只是寫_ + _:

  1. scala> val f = _ + _  
  2. < console>:4: error: missing parameter type for expanded  
  3. function ((x$1, x$2) => x$1.$plus(x$2))  
  4.  val f = _ + _  
  5.  ˆ  
這種情況下,你可以使用冒號(hào)指定類型,如下:

  1. scala> val f = (_: Int) + (_: Int)  
  2. f: (Int, Int) => Int = < function>  
  3. scala> f(510)  
  4. 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è)……,如此類推。

【相關(guān)閱讀】

  1. 介紹Scala的***類函數(shù)
  2. Scala的本地函數(shù):將私有方法轉(zhuǎn)換為本地方法
  3. Scala中定義函數(shù)的方法:method
  4. 繼續(xù)領(lǐng)悟函數(shù)式:Scala指令式風(fēng)格代碼的重構(gòu)
  5. 學(xué)習(xí)Scala的變量范圍

責(zé)任編輯:book05 來(lái)源: Artima
相關(guān)推薦

2009-06-16 17:54:38

Scala類語(yǔ)法語(yǔ)義

2023-10-27 13:59:30

Mybatis占位符

2020-10-31 17:33:18

Scala語(yǔ)言函數(shù)

2009-07-21 12:47:04

Scala私有字段定義操作符

2009-12-11 10:43:00

Scala講座操作符函數(shù)

2022-06-13 09:02:06

Swift類型占位符

2022-05-25 09:15:01

Swift 5.6占位符

2024-12-09 08:10:00

Python字符串格式化

2009-12-11 10:42:00

Scala講座類定義構(gòu)造函數(shù)

2009-07-22 07:42:00

Scala偏應(yīng)用函數(shù)

2009-12-11 10:44:00

Scala講座函數(shù) scala

2009-07-21 08:41:05

Scala操作符優(yōu)先級(jí)

2009-06-19 10:51:39

Scalapackage訪問(wèn)修飾符

2009-07-08 16:10:24

Scala簡(jiǎn)介面向?qū)ο?/a>函數(shù)式

2009-09-27 15:29:00

Scala講座面向?qū)ο?/a>Scala

2009-07-21 09:31:00

Scala基本類型文本

2009-07-22 07:57:00

ScalaCurry化函數(shù)

2010-04-01 08:47:09

Oracle函數(shù)

2024-06-20 11:52:44

C#占位符代碼

2009-07-22 08:45:35

Scala超類構(gòu)造器override修飾符
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久国产一区二区三区 | 成人av网站在线观看 | 一区欧美 | 午夜视频在线免费观看 | 欧美日韩综合视频 | 午夜网址| 欧美一级欧美三级在线观看 | 欧美精品一区二区免费 | www亚洲精品 | 亚洲第一在线 | 视频一区二区在线观看 | 一级黄色毛片免费 | 午夜tv免费观看 | 日韩av在线中文字幕 | 91精品国产手机 | 国产精品久久久久久久久久妞妞 | 久久国产一区二区三区 | a在线免费观看视频 | www.99精品| 国产精品呻吟久久av凹凸 | 亚洲字幕在线观看 | 久久久久国产精品午夜一区 | 99re视频在线观看 | 久久久精品网站 | 91在线观看网址 | 影音先锋中文字幕在线观看 | 精品久久国产 | 91久久久久久久久久久 | 国产91av视频| 日韩精品久久 | 亚洲精品成人网 | 免费久久久 | 国产内谢| 午夜男人天堂 | 国产 日韩 欧美 在线 | 日韩不卡在线 | 亚洲+变态+欧美+另类+精品 | 99视频久| 中文字幕日韩三级 | 成人精品一区二区三区中文字幕 | 久久这里有精品 |