某些Scala的操作符并不总对所有参数求值,例如标准布尔操作符&&和||,这种操作符也可以是方法调用,因为Scala的参数是允许传名的。下面是一个Bool类,模拟系统内建的布尔类型。
abstract class Bool {
def && (x: => Bool): Bool
def || (x: => Bool): Bool
}
在这个类中,&&和||的形参是“=>Bool”,里面的箭头表示实际参数以未求值的状态进行传递,即参数在每一次被引用的时候才求值(也就是说这个参数实际上像一个无参数的函数一样)。
这是Bool类型的两个典型(canonical)实例:
object False extends Bool {
def && (x: => Bool): Bool = this
def || (x: => Bool): Bool = x
}
object True extends Bool {
def && (x: => Bool): Bool = x
def || (x: => Bool): Bool = this
}
从上述实现可以看出,&&(或者相应地||)操作,只有在左侧对象是True(或相应地False)的时候,右侧对象才会被求值。
如同本节所示,在Scala中可以把所有操作符定义为方法,每一个操作则是一个方法调用。为了性能需求,Scala的编译器会把参数为值类型的操作直接编译为基本操作指令,但这对于编程者是完全透明的。
在前面的例子中,Zero和Succ都继承一个类,这并不是唯一的可能性。在Scala中一个类或对象可以同时继承一个类以及若干个特征(traits),一个特征是一个抽象类,作用就是用来与其它类组合。特征有时候类似于Java中的接口,可以用于定义一套抽象方法,用于被其他类实现。但不同的是Scala的特征可以有属性以及具体方法。(traits将会在后面介绍——译注)
分享到:
相关推荐
Scala 概述(瑞士洛桑联邦理工) Scala 概述(瑞士洛桑联邦理工)
史上最强思维导图记忆scala array方法
Scala概述.pptx 变量.pptx 运算符.pptx 程序流程控制.pptx 函数式编程基础.pptx 面向对象编程(基础部分).pptx 面向对象编程(中级部分).pptx 面向对象编程(高级特性).pptx 隐式转换和隐式参数.pptx 集合(上)-基本使用...
《Scala编程》介绍了一种新的编程语言,它把面向对象和函数式编程概念有机地结合为整体,从而形成一种完整统一、语义丰富的新思维体系。《Scala编程》循序渐进,由浅入深,经作者精心组织、仔细编排,将语言中的各种...
Scala程序设计第2版 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。
第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...
Eclipse Scala环境的配置 https://yanxml.blog.csdn.net/article/details/89250222 配套的下载资源. http://alchim31.free.fr/m2e-scala/update-site/ 这个地址被墙了.上传,方便大家离线安装`m2e-scala`.
Scala面向对象
wootjs, Scala 和JavaScript通过 Scala.js的WOOT模型 带 Scala.js的 WOOT协作文本编辑,使用WOOT算法。在 Scala 中实现,在JVM和JavaScript解释器上运行。不耐烦的 $ sbt server/run 然后打开 http:
spark,scala编程指南第三版,非常好的资料,高清无水印
1.1.1 富有魅力的Scala 2 1.1.2 关于Java 8 3 1.2 安装Scala 3 1.2.1 使用SBT 5 1.2.2 执行Scala命令行工具 6 1.2.3 在IDE中运行Scala REPL 8 1.3 使用Scala 8 1.4 并发 17 1.5 本章回顾与...
2 scala很多库在设计的时候,不理解原因,包括Option,Collection的很多看似有冗余的地方 3 很多scala的默认写法,不理解 4 多态的具体化,尤其是协变的意义所在 5 各种重载的符号使用 之前读过 programming in...
文件类型包括9个XML配置文件、2个CRC文件、2个Scala源代码文件、1个名称文件、1个Markdown文档、1个Parquet数据文件、1个名称列表文件、1个TXT文本文件、1个PMML文件和1个Java源代码文件。该系统利用JPMML-Spark将...
Scala编程(第三版)中英文,代码全 Martin Odersky 是Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是Typesafe, Inc.(已更名为Lightbend)的创始人。他的研究方向是编程语言和系统,更具体...
Programming in Scala 2nd Edition
第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...
第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-Scala编程详解:函数式编程 共14页 第17讲-Scala编程...
Scala类和对象.md
采用ARIMA模型(自回归积分滑动平均模型)+三次指数平滑法(Holt-Winters),用scala语言实现的在spark平台运行的分布式时间序列预测算法
scala netbeans 插件(2)scala netbeans 插件(2)scala netbeans 插件(2)