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

Scala概述(四)操作也是对象(1)

阅读更多

4.       操作也是对象(Operations Are Objects

Scala是一种函数式编程语言,也就是说每一个函数都是一个值。Scala有很简洁的语法用于定义匿名和curry化函数(curried functionfunctional programming的概念之一,名字源于Haskell CurryHaskell的发明者,一般都不翻译。本文后面并没有针对这个概念的解释和实现,有兴趣者请参阅相关参考资料——译注),以及嵌套函数等。

 

4.1.    方法是函数式值(Methods are Functional Values

为了演示如何将函数作为一个值使用,我们定义一个exists函数,用于检测一个数组当中是否有符合条件的元素:

  def exists[T](xs: Array[T], p: T => Boolean) = {

    var i: Int = 0

    while (i < xs.length && !p(xs(i))) i = i + 1

    i < xs.length

  }

    方法参数[T]表示数组类型是任意的(类型参数在5.1节中详细介绍),参数p表示验证条件也是任意的,p的类型是函数类型(function typeT=>Boolean,表示所有定义域是T类型,值域是Boolean的函数。函数参数可以像普通函数一样执行,如上面的循环体中显示的p被调用那样。以函数作为参数或者返回值的函数,称为高阶函数。

定义了exists,我们可以通过双重否定来定义一个函数forall,表示数组的所有元素没有一个不符合条件的,该函数定义如下:

  def forall[T](xs: Array[T], p: T => boolean) = {

    def not_p(x: T) = !p(x)

    !exists(xs, not_p)

  }

函数forall内部定义了一个嵌套函数not_p,表示不满足条件p。嵌套函数可以访问所在环境的函数参数和本地变量,例如not_p访问了forall的参数p

Scala还可以定义一个没有名字的函数,例如下面这个简版的forall函数:

  def forall_short[T](xs: Array[T], p: T => boolean) =

    !exists(xs, (x: T) => !p(x))

其中(x: T) => !p(x)定义了一个匿名函数(anonymous function),将类型为T的参数p映射为!p(x)

有了existsforall,我们可以定义一个函数hasZeroRow,用以检验一个二维矩阵是否有一行全是0

  def hasZeroRow(matrix: Array[Array[int]]) =

exists(matrix, (row: Array[int]) => forall(row, 0 ==))

表达式forall(row, 0 ==)用于检测row是否只包含0。这里,0==方法被作为参数传递给forall的参数p,这显示了方法本身也是值,有点类似于C#中的delegates”。

 

分享到:
评论
2 楼 edge 2008-09-29  
mochow 写道

发布到博客首页的话,会有更多人关注。


多谢,我会等翻译差不多了发一下
1 楼 mochow 2008-09-28  
发布到博客首页的话,会有更多人关注。

相关推荐

    scala的操作笔记

    #### 二、Scala概述 ##### 2.1 什么是Scala Scala是一种多范式编程语言,它结合了面向对象编程与函数式编程的特点。Scala语言的设计目标之一就是尽可能地提高代码的可读性和简洁性,同时保持高性能。由于Scala运行...

    scala 教程

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

    Scala Overview

    10.模式匹配:Scala提供了强大的模式匹配功能,用于解构对象并基于其结构执行不同的操作。这在处理枚举、列表和其他数据结构时特别有用。 通过这些特性,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 是一种多范式编程语言,融合了...

    Scala 电子书

    此外,教程可能还会介绍如何使用Scala的模式匹配、Actor模型(用于并发编程)以及Scala与Java互操作性。 "Programming in Scala"是一本权威的Scala指南,由Martin Odersky(Scala的创造者)和其他专家合著。这本书...

    A Brief Introduction to Scala

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

    Scala语言规范.docx

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

    Scala in Action.pdf

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

    scala编程基础

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

    Learning.Scala.2014.12.pdf

    根据提供的文件信息,本书《Learning Scala》是一本旨在为读者提供Scala语言深入理解与实践操作的指南。Scala是一种结合了面向对象编程与函数式编程特性的强大语言,它运行在Java虚拟机(JVM)上,具有强大的类型...

    Scala语言规范.zip

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

    Scala学习笔记(全)

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

    Scala-part2集合框架

    - **列表操作**:对`List`的所有操作都会返回一个新的`List`对象,不会修改原有列表。 - 例如,可以使用`++`或`:::`运算符来合并列表。 - **列表切片**:使用`slice`方法可以从列表中提取子列表。 ##### 可变序列 ...

Global site tag (gtag.js) - Google Analytics