快速业务通道

面向Java开发人员的Scala指南 - Scala控制结构内部揭密 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
主体本身。

简单性

在 Scala 中,可以将 Java 代码中复杂的一长串语句缩短为一个简单的表达式。例如,以下是遍历目录查找所有 .scala 文件并显示每个文件名称的方法:

清单 14. Finding .scala

// This is Scala object App {   def main(args : Array[String]) =   {    val filesHere = (new java.io.File(".")).listFiles    for (     file <- filesHere;     if file.isFile;     if file.getName.endsWith(".scala")    ) System.out.println("Found " + file)   } }

面向Java开发人员的Scala指南 - Scala控制结构内部揭密(7)

时间:2011-01-30 Ted Neward

这种 for 过滤很常见(并且在此上下文中,分号很让人讨厌),使用这种过滤是为了帮助您做出忽略分号的决定。此外,Scala 允许将上述示例中的圆括号之间的语句直接作为代码块对待:

清单 15. Finding .scala(版本 2)

// This is Scala object App {   def main(args : Array[String]) =   {    val filesHere = (new java.io.File(".")).listFiles    for {     file <- filesHere     if file.isFile     if file.getName.endsWith(".scala")    } System.out.println("Found " + file)   } }

作为 Java 开发人员,您可能发现最初的圆括号加分号的语法更直观一些,没有分号的曲线括号语法很难读懂。幸运的是,这两种句法产生的代码是等效的。

一些有趣的事

在 for 表达式的子句中可以分配一个以上的项,如清单 16 中所示。

清单 16. 名称中有什么?

// This is Scala object App {   def main(args : Array[String]) =   {    // Note the array-initialization syntax; the type (Array[String])    // is inferred from the initialized elements    val names = Array("Ted Neward", "Neal Ford", "Scott Davis",     "Venkat Subramaniam", "David Geary")    for {     name <- names     firstName = name.substring(0, name.indexOf('' ''))    } System.out.println("Found " + firstName)   } }

这被称为 “中途赋值(midstream assignment)”,其工作原理如下:定义了一个新值 firstName,该值用于保存每次执行循环后的 substring 调用的值,以后可以在循环主体中使用此值。

这还引出了嵌套 迭代的概念,所有迭代都位于同一表达式中:

清单 17. Scala grep

// This is Scala object App {   def grep(pattern : String, dir : java.io.File) =   {    val filesHere = dir.listFiles    for (     file <- filesHere;     if (file.getName.endsWith(".scala") || file.getName.endsWith(".java"));     line <- scala.io.Source.fromFile(file).getLines;     if line.trim.matches(pattern)    ) println(line)   }   def main(args : Array[String]) =   {    val pattern = ".*object.*"    grep pattern new java.io.File(".")   } }

面向Java开发人员的Scala指南 - Scala控制结构内部揭密(8)

时间:2011-01-30 Ted Neward

在此示例中,grep 内部的 for 使用了两个嵌套迭代,一个在指定目录(其中每个文件都与 file 连接在一起)中找到的所有文件上进行迭代,另一个迭代在目前正被迭代的文件(与 line 本地变量连接在一起)中发现的所有行上进行迭代。

使用 Scala 的 for 结构可以做更多的事,但目前为止提供的示例已足以表

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号