`
edge
  • 浏览: 68954 次
  • 性别: 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概述 ##### 2.1 什么是Scala Scala是一种多范式编程语言,它结合了面向对象编程与函数式编程的特点。Scala语言的设计目标之一就是尽可能地提高代码的可读性和简洁性,同时保持高性能。由于Scala运行...

    scala 教程

    - **函数式编程**:同时,Scala也支持函数式编程范式,包括高阶函数、不可变数据结构等。 - **兼容性**:Scala可以在Java平台上运行,可以调用Java库,并且与Java代码无缝交互。 - **简洁性**:Scala通过减少冗余...

    Scala Overview

    Scala编程语言概述第二版马丁·奥德斯基,菲利普·阿尔瑟,文森特·克雷梅,伊利亚斯·德洛斯吉尔·杜波切,布尔卡·艾米尔,肖恩·麦克迪尔米德,斯特凡·米歇尔乌德,尼古拉·米海洛夫,米歇尔·辛茨,埃里克·...

    Scala详细总结(精辟版++)

    - **面向对象**:Scala是纯粹的面向对象语言,每一个值都是对象,所有的操作都是方法调用。 - **函数式编程**:Scala同时也是一个成熟的函数式编程语言,支持高阶函数、模式匹配等功能。 - **类型推断**:Scala具有...

    scala课件.zip

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

    基于scala语言的spark操作,包含连接操作mysql,连接hdfs.zip

    本教程将探讨如何使用 Scala 语言来操作 Spark,并介绍如何与 MySQL 数据库和 HDFS(Hadoop 分布式文件系统)进行交互。以下是相关知识点的详细说明: **1. Scala 语言基础** Scala 是一种多范式编程语言,融合了...

    A Brief Introduction to Scala

    #### Scala概述 Scala是一种相对新兴的编程语言,旨在为Java虚拟机(JVM)以及后来的通用语言运行时(CLR)提供支持。它融合了函数式编程(Functional Programming, FP)与面向对象编程(Object-Oriented Programming, OOP...

    Scala 电子书

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的编程体验。在这个电子书集合中,我们有三本关于Scala的重要书籍,分别是"Scala Tutorial"、"Programming in ...

    Scala in Action.pdf

    ### Scala in Action: 关键知识点概述 #### 一、标题:Scala in Action - **书名解析**:“Scala in Action”这一标题明确指出本书聚焦于Scala编程语言的应用实践。通过“in Action”的后缀,作者旨在传达一种实用...

    Scala语言规范.docx

    #### 一、Scala语言概述 **Scala**是一种强大的多范式编程语言,它将面向对象编程和函数式编程的最佳特性融合在一起。作为一种类Java的语言,Scala旨在提供比Java更简洁、更灵活且功能更丰富的编程体验。 - **面向...

    Learning.Scala.2014.12.pdf

    5. **自定义内联操作符** - 内联操作符可以使代码更加简洁易读,Scala允许用户定义自己的内联操作符。 - 通过这种方式,可以简化现有的操作或创建自己的领域特定语言(DSL)。 6. **类与特质** - 类是面向对象...

    Scala语言规范.zip

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种更高级别的抽象,使代码更加简洁、优雅。由于其与Java虚拟机(JVM)的紧密集成,Scala程序可以直接在Java平台上运行,这也是它被标记...

    scala介绍

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高度可并行化的编程环境。这个“scala介绍”可能涵盖以下几个关键知识点: 1. **语言概述**:Scala由Martin Odersky...

    scala编程基础

    **Scala概述**: - **定义**:Scala是一种功能强大的编程语言,旨在集成面向对象编程和函数式编程的特点。它运行在Java平台上,并且与Java高度兼容。 - **为何选择Scala**: - **优雅性**:良好的API设计可以极大...

    经典书籍 Scala for the Impatient.pdf

    5. **高级特性**:此外,书中还涉及Scala的一些高级特性,比如类型类、隐式转换等,这些都是Scala与其他编程语言相比的独特之处。 6. **代码示例**:为了让读者更好地理解和应用所学知识,《Scala for the Impatient...

    Scala学习笔记(全)

    #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala不仅能够利用Java生态...

Global site tag (gtag.js) - Google Analytics