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