从 Martin Odersky 的 Scala 课程中,我有以下练习(这是一个给出答案的视频练习):
" 提供表示非负整数的抽象类 Nat 的实现
不要在此实现中使用标准数字类。相反,实现一个子对象和一个子类。
一个用于数字零,另一个用于严格的正数。"
这是代码:
abstract class Nat {
def isZero : scala.Boolean
def predecessor : Nat
def successor = new Succ(this)
def + (that : Nat) : Nat
def - (that : Nat) : Nat
}
object Zero extends Nat {
def isZero = true
def predecessor = throw new Error("0.predecessor")
def + (that: Nat) = that
def - (that: Nat) = if(that.isZero) this else throw new Error("negative number")
}
class Succ(n : Nat) extends Nat {
def isZero = false
def predecessor = n
def +(that : Nat) = new Succ(n + that)
def -(that: Nat) = n - that.predecessor
}
在 Scala 工作表中,我有:
object NatTests {
new Successor(Zero).+(new Successor(Zero))
}
它返回一个新的 Sucessor。我认为我没有完全理解这段代码,因为我应该能够在不扩展代码的情况下添加非零对象?如果是这样,这是如何实现的?