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

介紹Scala的第一類函數(shù)

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

Scala擁有***類函數(shù):first-class function。你不僅可以定義函數(shù)和調(diào)用它們,還可以把函數(shù)寫成沒有名字的文本:literal并把它們像值:value那樣傳遞。我們?cè)诘?章介紹了函數(shù)文本并在第42頁的圖2.2里展示了基本語法。

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

函數(shù)文本被編譯進(jìn)一個(gè)類,類在運(yùn)行期實(shí)例化的時(shí)候是一個(gè)函數(shù)值:function value任何函數(shù)值都是某個(gè)擴(kuò)展了若干scala包的FunctionN特質(zhì)之一的類的實(shí)例,如Function0是沒有參數(shù)的函數(shù),F(xiàn)unction1是有一個(gè)參數(shù)的函數(shù)等等。每個(gè)FunctionN特質(zhì)有一個(gè)apply方法用來調(diào)用函數(shù)。因此函數(shù)文本和值的區(qū)別在于函數(shù)文本存在于源代碼,而函數(shù)值存在于運(yùn)行期對(duì)象。這個(gè)區(qū)別很像類(源代碼)和對(duì)象(運(yùn)行期)的那樣。

以下是對(duì)數(shù)執(zhí)行遞增操作的函數(shù)文本的簡(jiǎn)單例子:

  1. (x: Int) => x + 1 
=>指明這個(gè)函數(shù)把左邊的東西(任何整數(shù)x)轉(zhuǎn)變成右邊的東西(x + 1)。所以,這是一個(gè)把任何整數(shù)x映射為x + 1的函數(shù)。

函數(shù)值是對(duì)象,所以如果你愿意可以把它們存入變量。它們也是函數(shù),所以你可以使用通常的括號(hào)函數(shù)調(diào)用寫法調(diào)用它們。以下是這兩種動(dòng)作的例子:

  1. scala> var increase = (x: Int) => x + 1 
  2. increase: (Int) => Int = < function>  
  3. scala> increase(10)  
  4. res0: Int = 11 
本例中,因?yàn)閕ncrease是var,你可以在之后重新賦給它不同的函數(shù)值。

  1. scala> increase = (x: Int) => x + 9999 
  2. increase: (Int) => Int = < function>  
  3. scala> increase(10)  
  4. res2: Int = 10009 
如果你想在函數(shù)文本中包括超過一個(gè)語句,用大括號(hào)包住函數(shù)體,一行放一個(gè)語句,就組成了一個(gè)代碼塊。與方法一樣,當(dāng)函數(shù)值被調(diào)用時(shí),所有的語句將被執(zhí)行,而函數(shù)的返回值就是***一行產(chǎn)生的那個(gè)表達(dá)式。

  1. scala> increase = (x: Int) => {  
  2.         println("We")  
  3.         println("are")  
  4.         println("here!")  
  5.         x + 1 
  6.        }  
  7. increase: (Int) => Int = < function>  
  8. scala> increase(10)  
  9. We  
  10. are  
  11. here!  
  12. res4: Int = 11 
于是現(xiàn)在你已經(jīng)看到了有如螺絲和螺帽的函數(shù)文本和函數(shù)值。許多Scala庫給你使用它們的機(jī)會(huì)。例如,所有的集合類都能用到foreach方法。foreach方法被定義在特質(zhì)Iterable中,它是List,Set,Array,還有Map的共有超特質(zhì)。它帶一個(gè)函數(shù)做參數(shù),并對(duì)每個(gè)元素調(diào)用該函數(shù)。下面是如何用它打印輸出所有列表元素的代碼:

  1. scala> val someNumbers = List(-11, -10, -50510)  
  2. someNumbers: List[Int] = List(-11, -10, -50510)  
  3. scala> someNumbers.foreach((x: Int) => println(x))  
  4. -11 
  5. -10 
  6. -5 
  7. 0 
  8. 5 
  9. 10 
另一個(gè)例子是,集合類型還有filter方法。這個(gè)方法選擇集合類型里可以通過用戶提供的測(cè)試的元素。測(cè)試是通過函數(shù)的使用來提供的。例如,函數(shù)(x: Int) => x > 0可以被用作過濾。這個(gè)函數(shù)映射正整數(shù)為真,其它為假。下面說明如何把它用作filter:

  1. scala> someNumbers.filter((x: Int) => x > 0)  
  2. res6: List[Int] = List(510)  

像foreach和filter這樣的方法將在本書后面描述。

【相關(guān)閱讀】

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

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

2009-09-24 09:38:00

Scala講座第一類對(duì)象scala

2010-01-19 09:50:54

Java 7閉包

2009-12-11 10:42:00

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

2015-05-27 10:21:55

光纖光通信

2010-02-25 16:00:23

驅(qū)動(dòng)程序

2025-05-22 09:35:24

2009-07-22 07:42:00

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

2009-06-17 11:58:19

Linux

2017-03-07 15:13:28

Scala偏函數(shù)函數(shù)

2010-02-02 10:33:51

Python

2009-08-04 15:58:06

ASP.NET動(dòng)態(tài)控件

2021-04-20 09:44:42

CSS函數(shù)選擇器

2009-07-30 13:21:17

Scala入門Hello World

2009-07-22 07:53:00

Scala擴(kuò)展類

2009-07-08 15:35:18

Case類Scala

2009-06-16 17:54:38

Scala類語法語義

2009-07-22 07:57:00

ScalaCurry化函數(shù)

2009-07-22 09:31:59

Scala類類層級(jí)Java類

2011-06-28 11:06:16

Scala

2009-09-09 11:37:08

Scala的模式匹配
點(diǎn)贊
收藏

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

主站蜘蛛池模板: av毛片 | 国产亚洲精品精品国产亚洲综合 | 蜜桃视频在线观看免费视频网站www | 精品伊人久久 | 在线观看毛片网站 | 国产一级视频在线 | 欧洲一级黄| 天天色天天射天天干 | 亚洲第一av | 日韩成人精品在线 | 久久久观看 | 在线国产一区 | 成人性生交大免费 | gogo肉体亚洲高清在线视 | 国产日韩欧美在线一区 | 成年人在线观看视频 | 中文字幕欧美一区二区 | 国产精品日产欧美久久久久 | 日韩影院一区 | 7777精品伊人久久精品影视 | 国产亚洲精品久久久优势 | 中文精品视频 | 国产乱码精品一区二区三区av | 欧美一区二区三区 | 国产在线a视频 | 亚洲一区电影 | 日韩欧美国产一区二区三区 | 一区二区三区中文字幕 | 国内精品久久久久 | 麻豆久久久 | 国产成人精品一区二区三区视频 | 精品国产一级片 | 自拍偷拍视频网 | av在线一区二区 | 少妇性l交大片免费一 | 狠狠操狠狠操 | 韩国主播午夜大尺度福利 | 羞羞的视频在线 | 国产一区电影 | 欧美一区二区三区国产精品 | 黄色一级片aaa |