Scala

Scala二十四点游戏(4):算法之一

jerry Scala
前面我们定义了表达式的算法,通常的24点常用的算法,尽管都是穷举,也有几个常用的不同的算法,其中之一有人称为动态规划算法: 把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三

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

jerry Scala
在上篇中我们实现了整数的四则运算的算法,这里我们回到之前提到的 5 5 5 1 的例子,我们看看eval ( ? 5 * ( 5 ? 1/5) ? )的结果是多少? scala> eval ("5*(5-1/5)") res15: Int = 25 结果为25,我们知道这

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

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

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

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

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

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

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