我正在阅读"Scala编程"一书,并Rational在第6章的实现中遇到了一些问题.
这是我Rational班级的初始版本(基于本书)
class Rational(numerator: Int, denominator: Int) {
require(denominator != 0)
private val g = gcd(numerator.abs, denominator.abs)
val numer = numerator / g
val denom = denominator / g
override def toString = numer + "/" + denom
private def gcd(a: Int, b: Int): Int =
if(b == 0) a else gcd(b, a % b)
// other methods go here, neither access g
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,字段g在类的生命周期内保持不变,即使从未再次访问过.运行以下模拟程序可以看到此问题:
object Test extends Application {
val a = new Rational(1, 2) …Run Code Online (Sandbox Code Playgroud)