`
edge
  • 浏览: 66768 次
  • 性别: 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 概述(瑞士洛桑联邦理工) Scala 概述(瑞士洛桑联邦理工)

    scala课件.zip

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

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

    第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-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编程详解 第14讲-Scala编程详解:面向对象编程之继承 共13页.pptx

    第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...

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

    第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...

    Scala编程实战.zip

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

    Scala考试题1

    1.var,val和def三个关键字之间的区别 2.trait(特质)和abstract class(抽象类)的区别 3.object和class的区别 4.c

    Scala面向对象.docx

    Scala面向对象

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

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

    Scala实用指南

    要读者熟悉 Scala 编程语言,但需要读者具备 Java、面向对象编程的背景知识。因为本书以 一种非常务实的方式组织内容,所以读者无法学到 Scala 的所有内容,但是足以应付日常工 作,如果想要更全面地学习 Scala 以及...

    Scala 基础.pdf

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

    Scala 编程 / Scala Programming

    本书由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。...即便是不直接使用Scala或从事一线编程工作的读者,也能从本书学到大量关于函数式和面向对象的编程概念和技巧。 作者简介

    scala sdk scala-2.12.3

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

    scala的操作笔记

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

    scala 3本书打包

    随着spark兴起,scala作为spark项目的开发语言也越来越受到大家的关注。这种函数式与面向对象的编程语言极大的简化了代码的编写量,同时它就是为并发式编程而生的。这个打包文件中包含了《SCALA程序设计-JAVA虚拟机...

    Dotty是Scala的下一代编译器也是Scala的新语言概念和编译器技术研究平台

    Dotty 是 Scala 的下一代编译器,也是 Scala 的新语言概念和编译器技术研究平台

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

    第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-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 第...

Global site tag (gtag.js) - Google Analytics