Scala

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Scala 专题教程-抽象成员(6): 抽象类型

jerry Scala
在本专题开始,我们看到“Type T?的用法,这是声明一个抽象类型,本篇介绍这种声明的意义和用途。和其它类型的抽象类型一样,抽象类型定义也是定义了一个“占位符”类型,其具体定义由其子类声明。不同的子类可以定

Scala二十四点游戏(1):表达式计算(一)

jerry Scala
前面我们基本对Scala编程做了完整的介绍,教程可以参见Scala开发教程,但是实践才是最有效的学习方法,我们可以通过一些较为实用的例子来练习Scala编程。 我们首先通过我们小时候经常玩的算24,通过scala实现算二十

Scala二十四点游戏(2):表达式计算(二)

jerry Scala
在上篇Scala二十四点游戏(1):表达式计算(一)我们使用Scala实现了四则运算,但还不支持带括号的情况,本篇我们接着看看如处理带括号的情况, 比如表达式 1+2+(3*5)+3+3*(3+(3+5)) 括号的情况稍微有些复杂,一层括号