Scala中定義函數(shù)的方法:method
定義函數(shù)最通用的方法是作為某個對象的成員。這種函數(shù)被稱為方法:method。作為例子,代碼8.1展示了兩個可以合作根據(jù)一個給定的文件名讀文件并打印輸出所有長度超過給定寬度的行的方法。每個打印輸出的行前綴它出現(xiàn)的文件名:
代碼 8.1 帶私有的processLine方法的LongLines對象
- 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)建了一個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;
下面是如何使用這個應(yīng)用程序去發(fā)現(xiàn)LongLines.scala里超過45字符長度的行(只有一行):
- 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言做的很像。然而Scala里的函數(shù)概念比方法更寬泛。
【相關(guān)閱讀】