Scala 专题教程-抽象成员(5): 延迟初始化(Lazy vals)

jerry Scala
除了前面介绍的预先初始化成员值外,你还是让系统自行决定何时初始化成员的初始值,这是通过在val 定义前面添加lazy(懒惰),也是说直到你第一次需要引用该成员是,系统才会去初始化,否则该成员就不初始化(这也是l

Scala 专题教程-抽象成员(4): 预先初始化成员的值

jerry Scala
为了解决上篇中RationalTrait 的问题,有两个解决方案,第一方案是使用预先初始化成员的值的方法,这种方法可以让你在调用父类构造函数之前首先初始化子类的成员。 这种方法,是把初始化成员变量的定义放在调用父构

Scala 专题教程-抽象成员(3): 初始化抽象vals

jerry Scala
抽象定义的vals在某些时候起到父类参数的角色,它们允许你在子类中提供最父类中省略的定义,这对于Trait来说尤其重要,因为Trait没有提供你可以传入参数的构造函数。因此为Trait提供参数支持通常是通过抽象vals来实

Scala 专题教程-抽象成员(2): Type成员

jerry Scala
Scala中抽象类型,指的是在类或Trait中使用type定义的类型。 类或trait 本身也可以使用abstract来定义,但这种使用abstract定义的类和Trait在Scala中不称为抽象类型。 你可以把派生于抽象类型的 非抽象类型,比如前

Scala 专题教程-抽象成员(1): 概述

jerry Scala
当一个类或是Trait的成员没有定义完整的实现时,称为抽象成员。抽象成员需要在其子类中完成实现,在Scala中,抽象成员除了成员函数外,也可以说成员变量或是抽象类型。 本系列教程介绍四种抽象成员,vals, vars ,meth

Scala 专题教程-参数化类型(5): 类型上界

jerry Scala
本篇介绍类型上界,我们使用合并排序算法来给人名排序,这里先定义一个Person类,它派生于Ordered Trait,定义如下: class Person(val firstName:String, val lastName:String) extends Ordered[Per...
阅读全文

Scala 专题教程-参数化类型(4): 类型下界

jerry Scala
我们还是使用前面的Queue的例子,我们知道,我们不能使用+T(协变关系)来定义Queue,然而,我们可以通过给equeue方法本身提供一个类型参数使之一般化。 class Queue[+T] ( private val leading: List[T], priva

Scala 专题教程-参数化类型(3): Variance(类型变体)标识

jerry Scala
在上篇例子中定义的Queue是一个Trait,而不是一个类型,这是因为Queue需要一个类型参数才能构成一个类型, 也就是说你不可以直接创建一个类型为Queue的对象: scala> def doesNotCompile(q:Queue) {} <cons

Scala 专题教程-参数化类型(2): 信息隐藏

jerry Scala
上篇的Queue的实现在效率上来说还是比较高效的,但是却给类的使用者暴露一些不必要的实现细节,比如Queue的构造函数使用了两个List对象,其中一个还是个倒序的列表。本篇介绍如何隐藏这些不必要的信息。 在Java中,

Scala 专题教程-参数化类型(1): 概述和例子说明

jerry Scala
本专题介绍Scala的参数化类型,在介绍的过程中同时演示了信息隐藏的技术,这里我们通过实现一个纯函数化实现的队列来举例说明。 参数化类型帮助你实现通用的类型和Trait。比如通用的集合类Set,该通用集合类可以通过