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

Scala:函數文本的短格式和占位符語法

開發 后端
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第八章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。

函數文本的短格式

Scala提供了許多方法去除冗余信息并把函數文本寫得更簡短。注意留意這些機會,因為它們能讓你去掉代碼里亂七八糟的東西。

51CTO編輯推薦:Scala編程語言專題

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

  1. scala> someNumbers.filter((x) => x > 0)  
  2. res7: List[Int] = List(510)  
Scala編譯器知道x一定是整數,因為它看到你立刻使用了這個函數過濾整數列表(由someNumbers暗示)。這被稱為目標類型化:target typing,因為表達式的目標使用——本例中someNumbers.filter()的參數——影響了表達式的類型化——本例中決定了x參數的類型。目標類型化的精確細節并不重要。你可以簡單地從編寫一個不帶參數類型的函數文本開始,并且,如果編譯器不能識別,再加上類型。幾次之后你就對什么情況編譯器能或不能解開謎題有感覺了。

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

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

如果想讓函數文本更簡潔,可以把下劃線當做一個或更多參數的占位符,只要每個參數在函數文本內僅出現一次。比如,_ > 0對于檢查值是否大于零的函數來說就是非常短的標注:

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

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

  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.  ˆ  
這種情況下,你可以使用冒號指定類型,如下:

  1. scala> val f = (_: Int) + (_: Int)  
  2. f: (Int, Int) => Int = < function>  
  3. scala> f(510)  
  4. res11: Int = 15 

請注意_ + _將擴展成帶兩個參數的函數文本。這也是僅當每個參數在函數文本中最多出現一次的情況下你才能使用這種短格式的原因。多個下劃線指代多個參數,而不是單個參數的重復使用。***個下劃線代表***個參數,第二個下劃線代表第二個,第三個……,如此類推。

【相關閱讀】

  1. 介紹Scala的***類函數
  2. Scala的本地函數:將私有方法轉換為本地方法
  3. Scala中定義函數的方法:method
  4. 繼續領悟函數式:Scala指令式風格代碼的重構
  5. 學習Scala的變量范圍

責任編輯:book05 來源: Artima
相關推薦

2009-06-16 17:54:38

Scala類語法語義

2023-10-27 13:59:30

Mybatis占位符

2020-10-31 17:33:18

Scala語言函數

2009-07-21 12:47:04

Scala私有字段定義操作符

2009-12-11 10:43:00

Scala講座操作符函數

2022-05-25 09:15:01

Swift 5.6占位符

2022-06-13 09:02:06

Swift類型占位符

2024-12-09 08:10:00

Python字符串格式化

2009-12-11 10:42:00

Scala講座類定義構造函數

2009-07-22 07:42:00

Scala偏應用函數

2009-12-11 10:44:00

Scala講座函數 scala

2009-07-21 08:41:05

Scala操作符優先級

2009-06-19 10:51:39

Scalapackage訪問修飾符

2009-07-08 16:10:24

Scala簡介面向對象函數式

2009-09-27 15:29:00

Scala講座面向對象Scala

2009-07-22 07:57:00

ScalaCurry化函數

2009-07-21 09:31:00

Scala基本類型文本

2010-04-01 08:47:09

Oracle函數

2024-06-20 11:52:44

C#占位符代碼

2009-07-22 08:45:35

Scala超類構造器override修飾符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久免费精品国产免费高清 | 欧洲精品在线观看 | 欧美日韩高清一区二区三区 | 欧美激情精品久久久久 | 黄色福利 | 国产精品一区二区欧美 | 婷婷中文在线 | 成人做爰999| 亚洲一区 中文字幕 | www.久草.com| 亚洲成人免费av | 欧美中文字幕一区二区 | 国产精品美女久久久久久免费 | 日日夜夜免费精品视频 | 国产成在线观看免费视频 | 久久久久免费精品国产 | 成人影院午夜 | 久久综合九色综合欧美狠狠 | 国产小视频精品 | 国产精品一区二区三区在线 | 久久精品国产99国产 | 999精品视频| 国产精品亚洲一区二区三区在线观看 | 欧美一卡二卡在线 | 亚洲一区二区三区在线播放 | 日韩网站在线观看 | 日韩a在线| 激情自拍偷拍 | 亚洲精品欧美一区二区三区 | 热久久免费视频 | 嫩草视频在线看 | 精品国产视频 | 日韩中文字幕免费在线观看 | 国产三级日本三级 | 97国产精品视频人人做人人爱 | 免费黄色日本 | 久久久久免费精品国产 | 成av在线| 亚洲精品国产综合区久久久久久久 | 久久88 | h视频免费在线观看 |