`
edge
  • 浏览: 66761 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Scala概述(四)操作也是对象(4、5)

阅读更多

4.4.  序列(Sequences

高阶函数的使用是序列处理时的一个普遍特点。Scala类库定义了几种不同类型的序列:数组(arrays)、列表(lists)、流(streams)和迭代器(iterators)。所有的序列都继承自特征(trait):Scala.Seq;从而都定义了一套方法使得相应处理更简介、高效。例如:map方法将一个函数应用于一个序列的所有元素,产生一个以相应结果为元素的序列。另一个例子是filter方法,将一个断言(predicate)函数应用于所有的元素,产生一个由所有使该断言为真的元素组成的序列。

下面这个sqrts函数展示了上述两个方法的使用,它以一个双精度浮点数的列表xs为参数,返回一个以其所有非负元素的平方根为元素的列表:

def sqrts(xs: List[double]): List[double] =

xs filter (0 <=) map Math.sqrt

注意,Math.sqrt是一个Java函数,但它可以与Scala定义的函数一样的方式作为参数传递给高阶函数。

4.5.    For Comprehensions

Scala有一些特殊的语法用于更自然的表示某些特定的高阶函数的组合,其中for comprehensions就是对Haskell等语言中的list comprehensions进一步泛化。用for comprehensions写的sqrts如下:

def sqrts(xs: List[double]): List[double] =

for (val x <- xs; 0 <= x) yield Math.sqrt(x)

这里,val x <- xs是一个生成器(generator),产生一个序列,而0<=x是一个过滤器(filter),从前者产生的序列中根据某些条件过滤掉一些元素。这个comprehension返回另一个由yield子句所产生的数值构成的序列。一个comprehension可以有多个生成器。

For comprehension对应于mapflatMapfilter等高阶方法的组合,上面这个使用for comprehension实现的sqrts4.4节那个实现是相同的。

For comprehension的主要优势在于它并不受特定数据类型的限制,任何定义了mapflatMapfilter方法的类型都可以使用它,包括所有序列类型(2)、选项值(optional values)和数据库接口以及一些其他类型。用户还可以将for comprehension用于自定义类型,只要定义和实现了相关方法。

Scala中,For循环与comprehensions类似,对应于foreachfilter的组合。例如:列表1当中的for循环:for (val arg <- args) ...对应于args foreach (arg => ...)



2数组类型尚未实现序列的全部方法,因为某些方法需要运行时类型,这一功能尚未实现

分享到:
评论
1 楼 徐风子 2009-07-22  
我一直就觉得java里面的for有点不对劲,又说不出哪儿有问题,看了 for yield 总算明白了。

相关推荐

    Scala 概述(瑞士洛桑联邦理工)

    Scala 概述(瑞士洛桑联邦理工) Scala 概述(瑞士洛桑联邦理工)

    Scala编程详解 第13讲-Scala编程详解:面向对象编程之对象 共9页.pptx

    第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与Tuple 共8页 第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解...

    scala课件.zip

    Scala概述.pptx 变量.pptx 运算符.pptx 程序流程控制.pptx 函数式编程基础.pptx 面向对象编程(基础部分).pptx 面向对象编程(中级部分).pptx 面向对象编程(高级特性).pptx 隐式转换和隐式参数.pptx 集合(上)-基本使用...

    Scala编程详解 第14讲-Scala编程详解:面向对象编程之继承 共13页.pptx

    第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与Tuple 共8页 第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解...

    Scala编程详解 第12讲-Scala编程详解:面向对象编程之类 共12页.pptx

    第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与Tuple 共8页 第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解...

    scala API 操作hbase表

    最近看了hbase的源码根据源码写了一些scala调动hbase表的API,话不多说直接上代码!Hadoop的版本是2.7.3,scala版本是2.1.1,hbase的版本是1.1.2 如果版本不同可以修改pom的依赖项,但要注意版本冲突。 并且在scala...

    Scala语言规范-2019.rar

    Scala 的设计目的是要和两种主流面向对象编程语言Java 和 C#实现无缝互操作,这两种主流语言都非纯面向对象。 Scala 也是一门函数式变成语言,每个函数都是一个值,原生支持嵌套函数定义和高阶函数。 Scala 也支持...

    scala编程中文pdf

    scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...

    Scala编程实战.zip

    此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是...对于Scala新手来说这是一本不错的入门书,对于老手来说也是一本夯实基础,检视自己所学知识的好书。

    Scala面向对象.docx

    Scala面向对象

    Scala编程详解 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页.pptx

    第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与Tuple 共8页 第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解...

    Scala编程详解 第4讲-Scala编程详解:条件控制与循环 共7页.pptx

    第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与Tuple 共8页 第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解...

    Scala实用指南

    本书共分为 4 个部分:第一部分详细介绍 Scala 的一些基础知识,并和 Java 中的相关概 念进行了参照,方便读者快速上手 Scala;第二部分进一步介绍 Scala 的一些中级知识,以及 与 Java 的一些差异点,方便读者编写...

    SCALA从入门到精通个人笔记含代码

    操作符重载 模式匹配 函数式编程基础 函数式编程说明 函数定义/声明 函数运行机制 递归 函数注意事项和细节 过程 惰性函数和异常 面向对象编程初级 类和对象 包 包对象 面向对象编程中级 封装 继承 ...

    Scala编程详解 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页.pptx

    第10讲-Scala编程详解:数组操作之数组转换 共5页 第11讲-Scala编程详解:Map与Tuple 共8页 第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解...

    spark源码之scala基础语法demo

    scala是一种基于JVM的面向对象的函数编程,scala编程相对于java而言代码整洁、开发效率更高。 其中scala优点主要有: 1:面向对象,可以定义class,通过new调用实例对象使用。 2:兼容java,在scala中可以直接调用...

    Scala 基础.pdf

    scala基础文档,专门为计算而生的语言,Scala将(Java后者C++)面向对象设计和 函数式编程 结合在一起的简洁的高级编程语言。而 函数式编程强调的是通过传递算子(代码|函数)实现大规模数据集的本地计算。Scala虽然是...

    scala-2.13.0-M5.tgz

    Scala是一门多范式的编程语言,一种类似java的编程语言 ,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。该文件为scala-2.13.0下载。

    scala的操作笔记

    大数据开发技术scala《传智播客》

    scala sdk scala-2.12.3

    scala-2.12.3 scala-2.12.3 scala-2.12.3 scala-2.12.3

Global site tag (gtag.js) - Google Analytics