在scala中,类的用户在调用方法或使用val x = myclass.myproperty直接访问某个字段/成员之间没有区别。能够控制例如设置或获取字段,scala让我们覆盖_ =方法。但是=真的是一种方法吗?我很困惑。
我们来看下面的代码:
class Car(var miles: Int)
var myCar = new Car(10)
println(myCar.miles) //prints 10
myCar.miles = 50
println(myCar.miles) //prints 50
此代码也是如此(注意myCar.miles = 50
中的双重空格):
class Car(var miles: Int)
var myCar = new Car(10)
println(myCar.miles) //prints 10
myCar.miles = 50
println(myCar.miles) //still prints 50
现在我想改变miles
的设置或阅读方式,例如总是在屏幕上打印一些东西。我怎么能这样做,以便我的类的用户不受影响,并且如果在=符号之前使用空格,它没有任何区别?
答案 0 :(得分:9)
试试这个:
class Car(private var _miles: Int) {
def miles = _miles
def miles_=(m: Int): Unit = {
println("boo")
_miles = m
}
}
空白并不重要。编译器看到您正在分配miles
,并且无论您插入多少空格,都会插入对miles_=
的调用。