Scala中定义函数的方法:method
创始人
2024-04-18 22:50:57
0

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

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

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

  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. }  
下面是如何使用这个应用程序去发现LongLines.scala里超过45字符长度的行(只有一行):

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

到此为止,这些与你能用面向对象语言做的很像。然而Scala里的函数概念比方法更宽泛。

【相关阅读】

  1. 继续领悟函数式:Scala指令式风格代码的重构
  2. 学习Scala的变量范围
  3. Scala:match表达式、break和continue
  4. 学习Scala:使用try-catch表达式处理异常
  5. Scala中的for表达式:枚举的“瑞士军刀”

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...