edge 发表于 2013-2-5 01:25:55

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

3.3.    变量和属性(Variables and Properties)<span style="font-size: 15pt; line-height: 240%;" />

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