3.3. 变量和属性(Variables and Properties)
如果所有操作都是方法调用,那么变量引用(dereferencing)和赋值语句呢?实际上,如果这两种操作是针对类成员变量,那么也是被解释为方法调用的。对于所有类成员变量x:T,Scala这样定义其getter和setter:
def x:T
def x_=(new val:T):unit
这些方法引用和更新一个可修改(mutable)的内存单元,它不能被Scala程序直接访问。每一次x这个名称被引用,都会导致调用x这个无参数方法,同样,每次调用赋值语句:x=e,都是x_=(e) 这样一个方法调用。
由于变量访问也是方法调用,从而使Scala可以定义类似C#的属性概念(properties),例如,下述Celsius类定义了一个属性degree,只能设置大于-273的值:
class Celsius {
private var d: Int = 0
def degree: Int = d
def degree_=(x: Int): Unit = if (x >= 273) d = x
}
使用者可以使用这两个方法,如同他们是一个类成员变量一样:
val c = new Celsius; c.degree = c.degree-1