Functions and Data
- 用class关键字封装数据
- 用new关键字创建对象
- 以’.’访问对象成员
- 把函数封装成方法
class Rational(x: Int, y: Int) {
def numer = x
def denom = y
}
object rationals {
val x = new Rational(1, 2) // new创建一个对象
x.numer // 用'.'访问该members
x.denom
}
// implementing Rational Arithmetic
def addRational(r: Rational, s: Rational): Rational =
new Rational(
r.numer * s.denom + s.numer * r.denom,
r.denom * s.denom)
def makeString(r: Rational) =
r.numer + "/" + r.denom
makeString(addRational(new Rational(1, 2), new Rational(2, 3))) // 7/6
// package functions in the data abstraction itself, AKA add class methods
class Rational(x: Int, y: Int) {
def numer = x
def denom = y
def add(that: Rational) =
new Rational(
numer * that.denom + that.numer * denom,
denom * that.denom)
override def toString = numer + "/" + denom
def neg: Rational = new Rational(-number, denom)
/*
* Don't repeat yourself, idiot
* def sub(that: Rational) =
* new Rational(
* numer * that.denom - that.numer * denom,
* denom * that.denom)
*/
def sub(that: Rational) = add(that.neg)
}