面向Java开发人员的Scala指南 - Scala控制结构内部揭密 - 编程入门网
函数)作为参数并根据需要使用它们即可。
"for" 生成语言 所有这些都引导我们来到了 Scala 控制结构套件的实际动力源泉:for 结构。该结构看起来像是 Java 的增强 for 循环的简单早期版,但它远比一般的 Java 编程人员开始设想的更强大。 让我们来看一下 Scala 如何处理集合上的简单顺序迭代,根据您的 Java 编程经验,我想您应该非常清楚该怎么做: 清单 10. 对一个对象使用 for 循环和对所有对象使用 for 循环
此代码所做的正如您期望的那样,循环 10 次,并且每次都输出一些值。需要小心的是:表达式 “1 to 10” 并不意味着 Scala 内置了整数感知(awareness of integer)以及从 1 到 10 的计数方式。从技术上说,这里存在一些更微妙的地方:编译器使用 Int 类型上定义的方法 to 生成一个 Range 对象(Scala 中的任何东西都是对象,还记得吗?),该对象包含要迭代的元素。如果用 Scala 编译器可以看见的方式重新编写上述代码,那么该代码看起来很可能如下所示: 清单 11. 编译器看见的内容
实际上,Scala 的 for 并不了解那些成员,并且并不比其他任何对象类型做得更好。它所了解的是 scala.Iterable,scala.Iterable 定义了在集合上进行迭代的基本行为。提供 Iterable 功能(从技术上说,它是 Scala 中的一个特征,但现在将它视为一个接口)的任何东西都可以用作 for 表达式的核心。List、Array,甚至是您自己的自定义类型,都可以在 for 中使用。 面向Java开发人员的Scala指南 - Scala控制结构内部揭密(6)时间:2011-01-30 Ted Neward特殊性 正如上面已经证明的那样,for 循环可以做许多事情,并不只是遍历可迭代的项列表。事实上,可以使用一个 for 循环在操作过程中过滤许多项,并在每个阶段都产生一个新列表: 清单 12. 看一看还有哪些优点
注意到清单 12 中 for 表达式的第二个子句了吗?它是一个过滤器,实际上,只有那些传递给过滤器(即计算 true)的元素 “向前传给” 了循环主体。在这里,只输出了 1 到 10 的偶数数字。 并不要求 for 表达式的各个阶段都成为过滤器。您甚至可以将一些完全平淡无奇的东西(从循环本身的观点来看)放入管道中。例如以下代码显示了在下一个阶段进行计算之前的 i 的当前值: 清单 13. 让我如何爱上您呢?别那么冗长
在运行的时候,范围 1 到 10 中的每个项都将发送给 log,它将通过显式计算每个项是否为 true 来 “批准” 每个项。然后,for 的第三个子句将对这些项进行筛选,过滤出那些满足是偶数的条件的元素。因此,只将偶数传递给了循环 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |