Scala中定義函數(shù)的方法:method
定義函數(shù)最通用的方法是作為某個(gè)對(duì)象的成員。這種函數(shù)被稱為方法:method。作為例子,代碼8.1展示了兩個(gè)可以合作根據(jù)一個(gè)給定的文件名讀文件并打印輸出所有長(zhǎng)度超過(guò)給定寬度的行的方法。每個(gè)打印輸出的行前綴它出現(xiàn)的文件名:
代碼 8.1 帶私有的processLine方法的LongLines對(duì)象
- import scala.io.Source
 - object LongLines {
 - def processFile(filename: String, width: Int) {
 - val source = Source.fromFile(filename)
 - for (line < - source.getLines)
 - processLine(filename, width, line)
 - }
 - private def processLine(filename:String, width:Int, line:String) {
 - if (line.length > width)
 - println(filename+": "+line.trim)
 - }
 - }
 
processFile方法帶了filename和width做參數(shù)。它用文件名創(chuàng)建了一個(gè)Source對(duì)象并,在for表達(dá)式的發(fā)生器中,對(duì)source調(diào)用getLines。第3章的第十二步曾經(jīng)提到,getLines返回一個(gè)枚舉器,能在每一次枚舉中從文件里取出一行,包括換行符。for表達(dá)式通過(guò)調(diào)用幫助方法,processLine,處理所有的文件行。processLine方法帶三個(gè)參數(shù):filename,width和line。它檢查是否文件行的長(zhǎng)度超過(guò)給定長(zhǎng)度,如果是,就打印文件名,跟著一個(gè)冒號(hào),然后是文件行。
為了從命令行里使用LongLines,我們需要?jiǎng)?chuàng)建一個(gè)應(yīng)用,把第一個(gè)命令行參數(shù)當(dāng)作行長(zhǎng)度,并把后續(xù)的參數(shù)解釋為文件名:本書中,我們通常不會(huì)在例子程序中檢查命令行參數(shù)的合法性,這既是為了保護(hù)林木資源,也是為了減少會(huì)模糊例子重點(diǎn)部分的套路代碼。作為交換就是,當(dāng)輸入錯(cuò)誤時(shí),代之以產(chǎn)生有助的錯(cuò)誤信息,我們的例子程序?qū)伋霎惓!?nbsp;
下面是如何使用這個(gè)應(yīng)用程序去發(fā)現(xiàn)LongLines.scala里超過(guò)45字符長(zhǎng)度的行(只有一行):
- object FindLongLines {
 - def main(args: Array[String]) {
 - val width = args(0).toInt
 - for (arg < - args.drop(1))
 - LongLines.processFile(arg, width)
 - }
 - }
 
- $ scala FindLongLines 45 LongLines.scala
 - LongLines.scala: def processFile(filename: String, width: Int) {
 
到此為止,這些與你能用面向?qū)ο笳Z(yǔ)言做的很像。然而Scala里的函數(shù)概念比方法更寬泛。
【相關(guān)閱讀】















 
 
 




 
 
 
 