Từ Scala Martin Odersky của Tất nhiên tôi đã sau Tập thể dục (điều này một bài tập video trong đó câu trả lời được đưa ra):Object trong Scala
" Cung cấp một thực hiện các lớp trừu tượng Nat đại diện số nguyên không âm
không sử dụng các lớp học số tiêu chuẩn trong việc thực hiện này. Thay vào đó, thực hiện một sub-object và một sub-class.
một cho số không, người kia cho số đúng prositive. "
Đây là mã:
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
}
Trong một bảng tính Scala tôi có:
object NatTests {
new Successor(Zero).+(new Successor(Zero))
}
nào trả về một Sucessor mới. Tôi không nghĩ rằng tôi hiểu mã này hoàn toàn như tôi sẽ có thể thêm các đối tượng khác không có mã mở rộng? Nếu vậy, làm thế nào điều này được thực hiện?
Đối với nền , hãy xem xét số học Peano và/hoặc số của Giáo hội để bạn hiểu khái niệm đang được triển khai ở đây. –