清单 4. 构造函数链
class Rational(n:Int, d:Int)
{
def this(d:Int) = { this(0, d) }
注意,Scala 的构造函数链通过调用首选构造函数(Int,Int 版本)实现 Java 构造函数链的功能。
实现细节
在处理有理数时,采取一点数值技巧将会有所帮助:也就是说,找到公分母,使某些操作变得更容易。如果要将 1/2 与 2/4 相加,那么 Rational 类应该足够聪明,能够认识到 2/4 和 1/2 是相等的,并在将这两个数相加之前进行相应的转换。
嵌套的私有 gcd() 函数和 Rational 类中的 g 值可以实现这样的功能。在 Scala 中调用构造函数时,将对整个类进行计算,这意味着将 g 初始化为 n 和 d 的最大公分母,然后用它依次设置 n 和 d。
回顾一下 清单 1 就会发现,我创建了一个覆盖的 toString 方法来返回 Rational 的值,在 RunRational 驱动程序代码中使用 toString 时,这样做非常有用。