Scala编程(第4版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.1 Rational类的规格定义

有理数(rational number)是可以用比例表示的数,其中nd是整数,但d不能为0。n称作分子numerator)而d称作分母denominator)。典型的有理数如:等。跟浮点数相比,有理数的优势是小数是精确展现的,而不会舍入或取近似值。

我们在本章要设计的类将对有理数的各项行为进行建模,包括允许它们被加、减、乘、除。要将两个有理数相加,首先要得到一个公分母,然后将分子相加。例如,要计算,你会将左操作元的分子和分母分别乘以3,将右操作元的分子和分母分别乘以2,得到,再将两个分子相加,得到。要将两个有理数相乘,可以简单地将它们的分子和分母相乘。因此,*得到,这个结果可以被更紧凑地表示为正规化(normalized)的。有理数的除法是将右操作元的分子分母对调,然后做乘法。例如,等于,即

另一个(可能比较细微的)观察是,数学中有理数没有可变的状态。可以将一个有理数跟另一个相加,但结果是一个新的有理数,原始的有理数并不会“改变”。我们在本章要设计的不可变的Rational类也满足这个性质。每一个有理数都会有一个Rational对象来表示。当你把两个Rational对象相加时,你将会创建一个新的Rational对象来持有它们的和。

在本章你会看到,Scala提供给你用来编写类库的一些手段,它们感觉就像是语言原生支持的那样。例如,读完本章你将可以这样使用Rational类: