面向Java开发人员的Scala指南 - Scala控制结构内部揭密 - 编程入门网
达我的观点:Scala 的 for 实际上是一条管道,它在将元素传递给循环主体之前处理元素组成的集合,每次一个。此管道其中的一部分负责将更多的元素添加到管道中(生成器),一部分负责编辑管道中的元素(过滤器),还有一些负责处理中间的操作(比如记录)。无论如何,Scala 会带给您与 Java 5 中引入的 “增强的 for 循环” 不同的体验。
匹配 今天要了解的最后一个 Scala 控制结构是 match,它提供了许多 Scala 模式匹配功能。幸运的是,模式匹配会声明对某个值进行计算的代码块。首先,将执行代码块中最接近的匹配结果。因此,在 Scala 中可以包含以下代码: 清单 18. 一个简单的匹配
刚开始您可能将 Scala 模式匹配设想为支持 String 的 “开关’,带有通常用作通配符的下划线字符,而这正是典型开关中的默认情况。但是,这样想会极大地低估该语言。模式匹配是许多(但不是大多数)函数语言中可以找到的另一个特性,它提供了一些有用的功能。 对于初学者(尽管这没什么好奇怪的),可能认为 match 表达式自身会产生一个值,该值可能出现在赋值语句的右边,正如 if 和 try 语句所做的那样。这一点本身也很有用,但匹配的真正威力体现在基于各种类型进行匹配时,而不是如上所述匹配单个类型的值,或者更多的时候,它是两种匹配的组合。 因此,假设您有一个声明返回 Object 的函数或方法 —— 在这里,Java 的 java.lang.reflect.Method.invoke() 方法的结果可能是一个好例子。通常,在使用 Java 语言计算结果时,首先应该确定其类型;但在 Scala 中,可以使用模式匹配简化该操作: 清单 19. 您是什么?
因为 match 的很容易简单明了地描述如何针对各种值和类型进行匹配的能力,模式匹配常用于解析器和解释器中,在那里,解析流中的当前标记是与一系列可能的匹配子句匹配的。然后,将针对另一系列子句应用下一个标记,依此类推(注意,这也是使用函数语言编写许多语言解析器、编译器和其他与代码有关的工具的部分原因,这些函数语言中包括 Haskell 或 ML)。 关于模式匹配,还有许多可说的东西,但这些会将我们直接引导至 Scala 的另一个特性 case 类,我想将它留到下次再介绍。 结束语 Scala 在许多方面看起来都非常类似于 Java,但实际上只有 for 结构存在一些相似性。核心语法元素的函数特性不仅提供了一些有用的特性(比如已经提到的赋值功能),还提供了使用新颖有趣的方式扩展语言的能力,不必修改核心 javac 编译器本身。这使该语言更加符合 DSL 的定义(这些 DSL 是在现有语言的语 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |