Scala中定义函数的方法:method

定义函数最通用的方法是作为某个对象的成员。这种函数被称为方法:method。作为例子,代码8.1展示了两个可以合作根据一个给定的文件名读文件并打印输出所有长度超过给定宽度的行的方法。每个打印输出的行前缀它出现的文件名:

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)  



  }  


}  
代码 8.1 带私有的processLine方法的LongLines对象

processFile方法带了filename和width做参数。它用文件名创建了一个Source对象并,在for表达式的发生器中,对source调用getLines。第3章的第十二步曾经提到,getLines返回一个枚举器,能在每一次枚举中从文件里取出一行,包括换行符。for表达式通过调用帮助方法,processLine,处理所有的文件行。processLine方法带三个参数:filename,width和line。它检查是否文件行的长度超过给定长度,如果是,就打印文件名,跟着一个冒号,然后是文件行。

为了从命令行里使用LongLines,我们需要创建一个应用,把第一个命令行参数当作行长度,并把后续的参数解释为文件名:本书中,我们通常不会在例子程序中检查命令行参数的合法性,这既是为了保护林木资源,也是为了减少会模糊例子重点部分的套路代码。作为交换就是,当输入错误时,代之以产生有助的错误信息,我们的例子程序将抛出异常。 

object FindLongLines {  


 def main(args: Array[String]) {  



  val width = args(0).toInt  




  for (arg < - args.drop(1))  



   LongLines.processFile(arg, width)  


 }  


}  
下面是如何使用这个应用程序去发现LongLines.scala里超过45字符长度的行(只有一行):
$ scala FindLongLines 45 LongLines.scala  


LongLines.scala: def processFile(filename: String, width: Int) {  

相关推荐