快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
ash; 创建自己的语言结构。

那些通过死读书学习语言的书呆子会发现一件有趣的事:while 循环(Scala 中的一个原语结构)可能只是一个预定义函数。Scala 文档以及假设的 “While” 定义中对此进行了解释说明:

// This is Scala def While (p: => Boolean) (s: => Unit) {   if (p) { s ; While(p)(s) } }

上述语句指定了一个表达式,该表达式产生了一个布尔值和一个不返回任何结果的代码块(Unit),这正是 while 所期望的。

扩展这些代码行很容易,并且可以根据需要使用它们,只需导入正确的库即可。正如前面提到的,这是构建语言的综合方法。在下一节介绍 try 结构的时候,请将这一点牢记于心。

再三尝试

try 结构允许编写如下所示代码:

清单 8. 如果最初没有获得成功……

// This is Scala val url =   try {    new URL(possibleURL)   }   catch {    case ex: MalformedURLException =>     new URL("www.tedneward.com")   }

清单 8 中的代码与 清单 2 或 清单 3 中 if 示例中的代码相差甚远。实际上,它比使用传统 Java 代码编写更具技巧,特别是在您想捕获不可变位置上存储的值的时候(正如我在 清单 4 中最后一个示例中所做的那样)。这是 Scala 的函数特性的又一个优点!

清单 8 中所示的 case ex: 语法是另一个 Scala 结构(匹配表达式)的一部分,该表达式用于 Scala 中的模式匹配。我们将研究模式匹配,这是函数语言的一个常见特性,稍后将介绍它;现在,只把它看作一个将用于 switch/case 的概念,那么哪种 C 风格的 struct 将用于类呢?

现在,再来考虑一下异常处理。众所周知,Scala 支持异常处理是因为它是一个表达式,但开发人员想要的是处理异常的标准方法,并不仅仅是捕获异常的能力。在 AspectJ 中,是通过创建方面(aspect)来实现这一点的,这些方面围绕代码部分进行联系,它们是通过切入点定义的,如果想让数据库的不同部分针对不同种类异常采取不同行为,那么必须小心编写这些切入点 —— SQLExceptions 的处理应该不同于 IOExceptions 的处理,依此类推。

在 Scala 中,这只是微不足道的细节。请留神观察!

清单 9. 一个自定义异常表达式

// This is Scala object Application {   def generateException()   {    System.out.println("Generating exception...");    throw new Exception("Generated exception");   }   def main(args : Array[String])   {    tryWithLogging // This is not part of the language    {     generateException    }    System.out.println("Exiting main()");   }   def tryWithLogging (s: => _) {    try {     s    }    catch {     case ex: Exception =>      // where would you like to log this?    // I choose the console window, for now    ex.printStackTrace()    }   } }

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

时间:2011-01-30 Ted Neward

与前面讨论过的 While 结构类似,tryWithLogging 代码只是来自某个库的函数调用(在这里,是来自同一个类)。可以在适当的地方使用不同的主题变量,不必编写复杂的切入点代码。

此方法的优点在于它利用了 Scala 的捕获一级结构中横切逻辑的功能 —— 以前只有面向方面的人才能对此进行声明。清单 9 中的一级结构捕获了一些异常(经过检查的和未经检查的都包括)并以特定方式进行处理。上述想法的副作用非常多,惟一的限制也许就是想象力了。您只需记得 Scala 像许多函数语言一样允许使用代码块(aka

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号