Scala概述(三)统一的对象模型(3)

阅读更多

3.3.    变量和属性(Variables and Properties

如果所有操作都是方法调用,那么变量引用(dereferencing)和赋值语句呢?实际上,如果这两种操作是针对类成员变量,那么也是被解释为方法调用的。对于所有类成员变量x:TScala这样定义其gettersetter

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

 

你可能感兴趣的:(Scala,C,C++,C#)