自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala中定義函數(shù)的方法:method

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

定義函數(shù)最通用的方法是作為某個對象的成員。這種函數(shù)被稱為方法:method。作為例子,代碼8.1展示了兩個可以合作根據(jù)一個給定的文件名讀文件并打印輸出所有長度超過給定寬度的行的方法。每個打印輸出的行前綴它出現(xiàn)的文件名:

  1. import scala.io.Source  
  2. object LongLines {  
  3.   def processFile(filename: String, width: Int) {  
  4.     val source = Source.fromFile(filename)  
  5.     for (line < - source.getLines)  
  6.       processLine(filename, width, line)  
  7.   }  
  8.   private def processLine(filename:String, width:Int, line:String) {  
  9.     if (line.length > width)  
  10.       println(filename+": "+line.trim)  
  11.   }  
  12. }  
代碼 8.1 帶私有的processLine方法的LongLines對象

processFile方法帶了filename和width做參數(shù)。它用文件名創(chuàng)建了一個Source對象并,在for表達式的發(fā)生器中,對source調(diào)用getLines。第3章的第十二步曾經(jīng)提到,getLines返回一個枚舉器,能在每一次枚舉中從文件里取出一行,包括換行符。for表達式通過調(diào)用幫助方法,processLine,處理所有的文件行。processLine方法帶三個參數(shù):filename,width和line。它檢查是否文件行的長度超過給定長度,如果是,就打印文件名,跟著一個冒號,然后是文件行。

為了從命令行里使用LongLines,我們需要創(chuàng)建一個應(yīng)用,把第一個命令行參數(shù)當(dāng)作行長度,并把后續(xù)的參數(shù)解釋為文件名:本書中,我們通常不會在例子程序中檢查命令行參數(shù)的合法性,這既是為了保護林木資源,也是為了減少會模糊例子重點部分的套路代碼。作為交換就是,當(dāng)輸入錯誤時,代之以產(chǎn)生有助的錯誤信息,我們的例子程序?qū)伋霎惓!?nbsp;

  1. object FindLongLines {  
  2.  def main(args: Array[String]) {  
  3.   val width = args(0).toInt  
  4.   for (arg < - args.drop(1))  
  5.    LongLines.processFile(arg, width)  
  6.  }  
  7. }  
下面是如何使用這個應(yīng)用程序去發(fā)現(xiàn)LongLines.scala里超過45字符長度的行(只有一行):

  1. $ scala FindLongLines 45 LongLines.scala  
  2. LongLines.scala: def processFile(filename: String, width: Int) {  

到此為止,這些與你能用面向?qū)ο笳Z言做的很像。然而Scala里的函數(shù)概念比方法更寬泛。

【相關(guān)閱讀】

  1. 繼續(xù)領(lǐng)悟函數(shù)式:Scala指令式風(fēng)格代碼的重構(gòu)
  2. 學(xué)習(xí)Scala的變量范圍
  3. Scala:match表達式、break和continue
  4. 學(xué)習(xí)Scala:使用try-catch表達式處理異常
  5. Scala中的for表達式:枚舉的“瑞士軍刀”

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

2017-05-15 10:50:42

PythonBound MethoUnbound Met

2009-07-22 07:53:00

Scala無參數(shù)方法

2023-11-29 07:47:29

Golang函數(shù)

2009-07-20 16:56:51

Scala類的定義

2009-12-11 10:42:00

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

2009-07-22 08:57:49

Scalafinal

2009-07-08 16:52:29

ScalaScala教程

2013-07-30 13:35:12

methodfunction

2017-03-07 15:13:28

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

2009-07-22 07:42:00

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

2009-07-21 17:26:09

Scala本地函數(shù)

2023-09-12 07:38:36

C++getline函數(shù)

2009-07-22 08:34:47

Scala方法和字段

2009-07-22 07:57:00

ScalaCurry化函數(shù)

2009-07-22 09:22:20

Scala工廠對象

2009-06-17 13:26:06

scala繼承模型

2009-07-21 12:18:37

ScalaRational對象toString

2009-09-24 09:41:00

Scala講座Scala

2023-06-30 17:56:31

Scala元組

2009-12-11 10:44:00

Scala講座函數(shù) scala
點贊
收藏

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